The fourth-seeded Russian took advantage of a collapse by Kvitova, who held a comfortable 5-1 lead in the first set before Zvonareva stormed back to make it 5-5, breaking her opponent three times. Both players then held serve to force the tiebreaker.
The second set was all Zvonareva, who broke the fifth-seeded Czech three times to close out the match in 1 hour, 30 minutes.
"If I knew what happened I would tell you," Kvitova said. "I don't know what happened. At 5-1, I just didn't play my game and she came back and played much better than me. The first set was mine for sure."
Zvonareva will face Agnieszka Radwanska of Poland in Saturday's final. The ninth-seeded Radwanska beat No. 3 seed Victoria Azarenka of Belarus 6-3, 4-6, 6-2 in a match that lasted 2 hours, 31 minutes.
Zvonareva had won both her previous matches against Kvitova on hard courts and continued her dominance in Friday's match at Ariake Colosseum.
"I played very good tennis, very consistent," Zvonareva said. "Petra is a tough opponent. We always have tough matches but I was a little more consistent today."
Kvitova has beaten Zvonareva twice on clay and said the surface was a factor.
"On clay, she can't move as well as she does on the hard court so I have more space and time for winners," Kvitova said. "She plays very well on hard court and is tough to beat."
Zvonareva and Radwanska are 2-2 in head-to-head matches.
"I've beaten Vera a couple of times, she's a great player and I know I have to play my best to beat her," Radwanska said. "I just hope I can play like I can today."