The No. 6-ranked Zverev defeated No. 4 Thiem 6-3, 6-4 to reach the final again after beating Thiem for the 2018 title. He will face No. 10 Matteo Berrettini, who defeated Casper Ruud 6-4, 6-4, in the final, when he will be trying for his second title of the year after Acapulco in March.
Zverev broke Thiem's serve once in the first set and twice in the second on the Magic Box center court.
The German has yet to drop a set, including against Nadal in the Friday quarterfinals.
"They're probably the two clay-courters that you think of right now when you're thinking about Roland Garros and the biggest chances of winning," Zverev said of Nadal and Thiem. "Rafa is the favorite no matter what. Probably Novak [Djokovic] second, Dominic a close third. It's been so far a good week for me. The job is not done yet."
Berrettini didn't face a break point as he defeated Ruud to return to a final after winning Belgrade two weeks ago. He will be trying to win his first Masters 1000 final.
"The key today was putting pressure on his serve," Berrettini said. "I was always trying to get the momentum and attacking even his first serve. I know that he likes to have time, run around the forehand. I tried to do that. It worked out pretty well."
Thiem was playing in his first tournament since March after consecutive losses in Dubai and Doha. He has mostly struggled since winning the US Open for his first Grand Slam title.
"In general I'm super happy with the week," Thiem said. "I would have never expected to be in the semifinals, to play in the semifinals a player like him. I cannot complain about anything. Just, of course, there are many things to improve."
Information from The Associated Press was used in this report.