Kvitova, the No. 7 seed, emerged a 3-6, 6-3, 7-6 (7-2) winner over Williams, who was seeking her first finals appearance since last October. Each player had just two breaks, with Williams getting both of hers in the first.
Kvitova didn't allow Williams a break chance in the second set and fought off four break points in the third to get to the tie-breaker.
The loss dropped Williams to 0-3 this year in semifinal matches.
Fifth-seeded Angelique Kerber got by No. 4-seeded Caroline Wozniacki 6-4, 7-6 (7-5) in the other semifinal. Kerber had two breaks in winning the first set and another in the second that led to the tiebreaker. Wozniacki had eight break opportunities in the second set but only converted one of them.
Kerber takes a 2-1 career edge over Kvitova into Saturday's final. All of the matches were last year with two going three sets.
Kerber is 2-4 in previous WTA finals. She lost in three sets to Anastasia Pavlyuchenkova in April in her previous title match in 2013. Kvitova is 1-2, winning at Dubai, in WTA championship matches in 2013 and 10-4 overall.
The Toray Pan Pacific Open winner will take home $426,000 with the runner-up settling for $213,000. Williams and Wozniacki earned $106,425 each as semifinalists.
Beyonce flaunts bikini body, Blue Ivy in vacation pics
Couple mistakenly served bag of cash at McDonald's drive-thru