The 11-times champion made a sluggish start and was one point away from 1-5 deficit in the opening set but recovered well to convert seven of his 13 break-point opportunities and advance after two hours and 20 minutes.
"It was a very tough first set physically and mentally, too. Losing the first three games with my serve was tough. But I found a way at the right time," world number two Nadal said.
"I was lucky at 4-1, he had two points to be 5-1 and with 5-1 it's almost impossible. Then I played better. Being in the semi-finals again here means a lot to me."
Nadal has now won 25 consecutive sets on Court Rainier III since dropping one in his opening match in 2017 to Briton Kyle Edmund.
Earlier, World number one Novak Djokovic's French Open preparations were dealt with a blow as he suffered a 6-3 4-6 6-2 defeat by Russian Daniil Medvedev in the quarter-finals Friday.
Medvedev had lost each of his previous three clashes with Djokovic but he broke his Serbian opponent's serve five times to move into the final four.
"He's got a very solid backhand. He hits it very low and with depth," Djokovic said.
A windy day like today, conditions are changing every single game. It's kind of tough to find the rhythm, and he doesn't give you much rhythm.
"He improved his movement a lot since last year. He definitely deserves to be where he is."
Medvedev will next face another Serb in Dusan Lajovic, who followed up his shock win over world number five Dominic Thiem with a 6-4 7-5 victory over Italian qualifier Lorenzo Sonego.
For Djokovic, it was another premature exit from an ATP Masters 1000 event after he crashed out in the early rounds at Indian Wells and Miami last month.
The 31-year-old has struggled for rhythm in his first claycourt event of the season and will need step up his game to have a chance of winning his fourth straight Grand Slam title at next month's French Open.