Nadal cruised to the first set before defending champion Zverev won nine of the next 11 games to take the second set 6-1 and lead 3-1 in the decider.
But the Spaniard turned the match around following a lengthy rain delay and closed out a 6-1 1-6 6-3 victory.
The win will see Nadal regain the world number one ranking before the French Open which starts next Sunday.
Roger Federer had regained top spot in the rankings when Nadal lost to Dominic Thiem at the Madrid Masters last week, his only defeat on clay this season.
Nadal has now won three clay-court titles from four tournaments in the lead-up to his bid for an 11th Roland Garros title in Paris.
Nadal cruised to the first set in just 32 minutes and had looked on course for a routine victory against in-form Zverev, who had won 14 matches in a row and 30 matches in total this season – more than any other player.
But the 31-year-old made a number of uncharacteristic errors in the second set while world number three Zverev upped his game to level at 1-1.
The German, 21, broke Nadal’s serve in the opening game of the deciding set and maintained that break to lead 3-1 going into an 11-minute rain delay.
Nadal won the game after the players returned only for play to be halted by a second, longer rain delay, after which he won four games in a row to clinch the match.
The win is Nadal’s 78th ATP Tour title and takes him clear of John McEnroe into fourth place in the list of most men’s titles won in the Open era.
It also extends Nadal’s impressive record in Rome where he has won the title more than any other player with Serbia’s Novak Djokovic second on four titles.