The Dane prevailed in a gritty 155 minute contest that saw an incredible 18 breaks of serve.
Wozniacki, ranked 11 in the world and the third seed at the Premier-level tournament, will face top seed Samantha Stosur in the final.
Wozniacki served for the match at 6-5 in the second set but 46th-ranked Arvidsson battled back to force a tie-break.
In the third set, the Dane again served for the match after pulling ahead 5-3 and missed her chance on her serve but she finally ended Arvidsson's resistance in the next game.
Wozniacki, looking for her second WTA title of the season after winning the Korea Open last month, blamed the slow surface for her inability to finish the match.
"It was very tough to finish off the point on this surface, especially because we know each other so well," she said. "I had to raise my game in order to win today."
Arvidsson had beaten Marion Bartoli and Maria Kirilenko en-route to the final but was unable to prevent Wozniacki reaching her 31st career final and her third this year.
Stosur also came through a tough match, beating fourth seed Ana Ivanovic 2-6 6-3 6-2 to make her first final in eight months.
After splitting the first two sets, 2011 US Open champion Stosur broke Ivanovic in the fifth game for a 3-2 lead after the Serbian missed an easy volley on break point.
Ivanovic took a medical break after falling behind but looked a shadow of her former self after coming back on court as Stosur reeled off the next three games for an easy victory.
WTA Moscow semi-final results:
3-Caroline Wozniacki (Denmark) beat Sofia Arvidsson (Sweden) 6-3 6-7(4) 6-4
1-Samantha Stosur (Australia) beat 4-Ana Ivanovic (Serbia) 2-6 6-3 6-2
WTA Luxembourg semi-final results:
Monica Niculescu (Romania) beat Daniela Hantuchova (Slovakia) 6-1 6-3