Serving at 5-3 with match point at 40-30, the young German constructed the perfect point, only to smash an easy volley into the net.
"I did well (to get match point) but on match point I sucked, so that was it," Zverev, pulling no punches, said after the loss.
"I missed probably the easiest shot I had the whole match. That's what happened."
The teenager, rated by Nadal as "a possible future No.1", went badly off the boil, netting another forehand for break point before dumping a third into the net to be broken.
Nadal, smelling blood, took full advantage winning the final 10 points to stay on track to reach his 100th tour-level final.
Nadal will next face Kei Nishikori, who beat American John Isner 1-6 7-6 (7-2) 7-6 (7-5).
World No.1 Novak Djokovic is also through to the last eight, beating Feliciano Lopez 6-3 6-3.
Earlier Belgian David Goffin upset No.3 seed Stan Wawrinka 6-3 5-7 7-6 (7-5) and Canadian Milos Raonic took out sixth seed Tomas Berdych 6-4 7-6 (9-7).
Goffin sealed an upset win when Wawrinka netted a forehand in a closely contested tiebreak after a wildly fluctuating match that lasted nearly two-and-a-half hours.
It was only the second time in his career that Goffin had beaten a player ranked in the top 10, and it earned him a spot in the last eight of an ATP Masters 1000 event for the second time.
The 25-year-old Belgian will next meet big-serving Croat Marin Cilic, who beat Frenchman Richard Gasquet 7-5 5-7 6-2.
"It was the best win of my career, for sure," Goffin told Tennis Channel after an often erratic encounter in searing heat that featured 13 breaks of serve.
"I had some problems with my serve, a little bit with my toss. It was tough with the heat and the sun to control the ball."
- news.com.au