Lopez had to save five of six break points as he clung on to win 4-6 7-5 6-1 after a long rain delay.
Lopez will now face fellow Spaniard Fernando Verdasco, who breezed past number five Paolo Lorenzi 6-1 6-2 in less than an hour.
On the other side of the draw, Thomaz Bellucci fired 10 aces to book his place in the final four with a 6-3 7-6 (8/6) win over Alberto Montanes.
“I think that today’s key to win was that I served much better than in my other matches, and I was able to win a lot of points with my serve,” the Brazilian said on the ATP website.
“Montanes is a player that is very motivated and experienced, and he tried to make it more difficult for me towards the end. I was able to win a very tough match.”
Bellucci will next face eighth seed Victor Estrella Burgos, who overcome number four Martin Klizan 6-2 6-2.