The Spaniard's unbeaten record at the tournament looked in jeopardy as Dimitrov matched the world number five blow for blow, but the left-hander's consistency eventually prevailed to secure a 6-2 2-6 6-4 victory.
Nadal broke serve three times in the opening set as he dominated his inexperienced opponent from the baseline.
However, Dimitrov displayed plenty of fight in the second, breaking serve twice in taking the final four games of the set to level the score.
The opening eight games of the decider went with serve, but as Dimitrov began to struggle with cramp, Nadal capitalised to break serve for a 5-4 lead.
The Bulgarian continued to fight for his tournament survival, taking Nadal to deuce, but the number three seed was relentless, and he powered through to a semi-final showdown with Jo-Wilfried Tsonga.