The 27-year-old Czech, a two-time Wimbledon champion, needed another three-setter to beat the fourth-seeded Spaniard 3-6, 6-3, 6-4. It was Kvitova's sixth win over a top-10 player in 2018.
Kvitova, who beat top-ranked Caroline Wozniacki in three sets in the semifinals, is set to return to the top 10 rankings on Monday for the first time since she was the victim of a knife attack in her house in December 2016 that led to a lengthy layoff.
It was Kvitova's 22nd career title and came two weeks after she triumphed in St. Petersburg.
"I couldn't really dream about it one year ago when I was in total different position trying to come back and play. For me, it's something that's amazing. I couldn't really wish for more,'' said Kvitova, who extended her head-to-head record with Muguruza to 4-1.
Just like in her match against Wozniacki, the 16th-seeded Kvitova made a scratchy start, losing her first service game with two double faults to go 2-0 down. She then had two more double faults in the fourth game to get broken again, and was trailing 5-0 when she won three games in a row before losing the first set.
The momentum shifted toward Kvitova in the third game of the second set. She first saved a break-point at 30-40 with a backhand winner after doing all the running, and then held her serve with an ace. She saved another break point in the fifth game before breaking Muguruza with a couple of down-the-line shots to go 4-2 up.
Muguruza kept putting pressure on Kvitova's service game, and the Czech needed to save two break points again in the seventh game before holding her serve. Both players then held their serves comfortably to send the match into the deciding set.
"In the second set it was more what I was expecting . a tough match,'' Muguruza said. "You always know what she is capable of. The rankings don't really matter. She's always going to be like a top-10 player.''
Kvitova's service continued to be under pressure in the third set, and she saved two break points again in the fourth game to stay 2-2. But she broke immediately after that when Muguruza netted a backhand into the net after a 23-shot-long rally. She also seemed to hurt her knee during that rally and needed a medical timeout.
Despite coming back with a heavily taped left leg, Muguruza had a break point in the next game, only for Kvitova to unleash a stunning forehand shot to take it to deuce, and then hold with an ace to make it 4-2.
Muguruza came back from 15-40 down in the seventh game, making it 3-4 with a stunning lob shot, but Kvitova did not lose her next two service games to secure her 22nd title.
The key stat that highlighted the resilience of Kvitova was that Muguruza had 11 break points, but managed to convert just two of them. And after producing just four winners in the first set, Kvitova reeled off 29 in the next two.