The 19-year-old Serb, runner-up at the French Open last month, will face Venus Williams for a place in the final.
Facing defeat in the ninth game of the third set, Ivanovic saved three match points on her serve to get herself back into the match and then broke to turn the tables on her opponent.
A double fault by 18-year-old Vaidisova handed a delighted Ivanovic the match after two hours on the court.
Venus Williams surged into the semis with a 6-3, 6-4 victory over fifth seed Svetlana Kuznetsova.
The American used the momentum she had gathered in Wednesday's demolition of second seed Maria Sharapova to power herself to a 4-1 lead in the first set.
With an array of aggressive smashes, fast serves and high-speed shots to every area of the court Williams took the first set.
The 23rd seed broke in the third game of the second but then Kuznetsova fought back with her first break in the sixth.
The Russian's relief was short-lived when Williams immediately broke back.
The three-times former champion wasted four match points on her serve before forcing the Russian to hit long at the end of a lengthy rally to set up a semi-final meeting with either Ana Ivanovic or Nicole Vaidisova.