It looked a straightforward afternoon for the 31-year-old Spaniard when he clinched the first three games but Dimitrov worked his way back with a quick break to make it 3-3.
Nadal edged the opening set in the 10th game with a blistering forehand before he raced into a 5-0 lead in the second to stamp his authority on the match.
He wrapped up the victory in an hour and 31 minutes and extended his run of consecutive sets won on clay to 34.
Nadal needs to win the Masters 1000 tournament to retain number one ranking ahead of Roger Federer, and will face Japan’s Kei Nishikori in Sunday’s final.
“Every year is different and equally special,” Nadal said after beating Dimitrov for the 11th time in 12 career meetings.
“So I’ll just focus on doing the things that I have to do to give me another chance tomorrow. That’s it.
“I don’t want to think about another title yet, I just want to think about the way I have to play and try to be ready for it.”
Nishikori fought back from a set down to beat Germany’s Alexander Zverev 3-6 6-3 6-4 to reach his first Masters final since 2016 in Montreal.
Third seed Zverev looked in control when he claimed the opening set but Nishikori fought back to claim four straight games in the second to force a decider.
Each player saved two break points in their first service games of the decider before Nishikori steadied himself to convert a match point in the 10th game and book a place in the final.