Zverev, the 2017 winner, will play Nicolas Jarry in the final on Sunday after downing Novak Djokovic's conqueror Alejandro Tabilo in the last four.
The German came from a set down to win 1-6 7-6 (4) 6-2.
At 3-3 in the second-set tie-break, Zverev was just four points away from losing but came good in the end.
He said on the ATP website: "I was just hanging on in the second set. I brought my energy up.
"I was really just hanging on and waiting and the patience was kind of good.
"He hit me off the court in the first set and I did not play well at all, but he was a big reason why.
"He gave me no rhythm and I am happy I turned it around in the tie-break and ran away in the third set."
Chilean Jarry ruined Tommy Paul's birthday by winning the second semi-final 6-3 6-7 (3) 6-3.
"I was pleased with how I came back with my aggressive tennis in the third set," he said after reaching his first Masters final.
"To finish the match is never easy, but I made it through and it's an amazing feeling."