Sabalenka had won her last four matches with Vondrousova, and after winning the opening set, the Australian Open champion looked on course to progress.
Wimbledon champion Vondrousova led 4-1 in the second set before Sabalenka pulled it back to 4-3 but the Czech sixth seed broke for a third time and held serve to force the decider.
Sabalenka went 5-4 ahead in the final set before Vondrousova reeled off three games in a row to reach the semi-finals where she will meet either American third seed Coco Gauff (20) or Marta Kostyuk (21) of Ukraine.
"It was a very tough match, and I think a great one, too," Vondrousova said.
"She's a great player so I just tried to stay in the rallies. She hits very fast so it's tough to do something. But I stayed calm in the crucial moments."
Sabalenka reached the quarter-finals after her good friend Paula Badosa (26) was forced to retire through injury on Wednesday, with the match tied at one set each and 3-3 in the decider.
Fourth seed Elena Rybakina (24) also reached the semi-finals after overcoming the challenge of in-form Jasmine Paolini (28) 6-3, 5-7, 6-3.
Paolini won the Dubai Tennis Championships in February and rose to a career-high 14th in the world rankings and reached the last 16 at Indian Wells in March.
After winning the opening set, Rybakina had let slip a 4-2 lead in the second and came back from an early break by the Italian in the final set.
"I'm happy with my energy," Rybakina said.
"Of course, I had chances in the second set where I could have closed it out but overall, I think it's just a matter of matches and feeling better and better on the court."
Rybakina will face either world number one Iga Swiatek (22), who saw off Britain's Emma Raducanu (21) 7-6, 6-3.