The Spaniard lost to Zverev at the same stage of the Madrid Open seven days ago but responded to questions over his form by easing through this latest encounter.
Nadal, who saved two match points before beating Denis Shapovalov on Friday (AEST), raced 4-0 ahead in the first set against Zverev and had little trouble seeing the job through.
Aiming for a record-extending 10th title in the Italian capital, Nadal saved all eight break points he faced in the second set to advance 6-3 6-4 in two hours.
"I played more solid than Madrid. Conditions are different," he said. "Here the conditions are a little more normal. I was able to control a little bit more."
"I'm happy. I played a very solid match with not many mistakes, playing the way that I have to. It's an important victory for me against a great player."
Nadal will face Reilly Opelka for a place in the final, the American beating qualifier Federico Delbonis 7-5 7-6 (7-2) to reach his first ATP Masters 1000 semi-final.
Opelka entered the tournament on a six-game losing streak, but he kept his good run going in Rome by earning the only break of the opening set in the 12th game.
Both players held throughout the second set and it was big-serving Opelka who prevailed 7-2 in the tie-break.
The day's other quarter-final between Lorenzo Sonego and Andrey Rublev also fell victim to the bad weather and will get under way on Sunday (AEST).