The win gave the Spaniard his 56th title on clay – eight of them in Rome – and he will reclaim the world number one ranking from Roger Federer when the revised ATP standings are released on Monday.
Despite breaking to love in the first game, Nadal made a shaky start, losing his serve in the opening game before bouncing back.
The 31-year-old top seed broke Zverev to level the score and then turned up the heat, striking eight winners and making only four unforced errors to his opponent’s 10 to take the opener.
Zverev regrouped, holding for the first time in the match at the start of the second set before breaking Nadal to lead 2-0.
The 21-year-old came into the final as the form player on the ATP Tour, and he settled into a rhythm that had Nadal on the back foot on his favourite surface.
The youngster went 0-30 down while serving for the set but kept his head to win next four points before forcing the decider with a backhand winner down the line.
He carried his momentum into the third set, breaking Nadal to go 2-0 up and gain an early advantage.
Nadal kept himself alive with a hold to love, and two more service games went by before play was halted for the first time with the rain spitting down.
Nadal emerged after a short break trailing 3-1 and held serve again before the heavens opened a second time, forcing the 45-minute delay that proved decisive.
The Spaniard broke back immediately after the restart to draw level at 3-3 and then held to 15 to get his nose in front.
Scenting blood, Nadal did what he does best, hounding Zverev into coughing up another break point that he claimed with a stunning crosscourt backhand volley.
His confidence soaring, Nadal served for the match, gaining two match points with a trademark forehand winner.
Zverev saved the first, but could do nothing about the second as Nadal dropped a short volley over the net to claim the title.