World number three Stanislas Wawrinka advanced with a 7-5 6-3 win over Australian Marinko Matosevic while Radek Stepanek, who eliminated Andy Murray in the third round, defeated South African Kevin Anderson 1-6 6-3 6-2.
Bulgarian Grigor Dimitrov completed the semi-final lineup after Ukrainian opponent Alexandr Dolgopolov withdrew because of injury.
Lopez, who beat four-times champion Lleyton Hewitt in the second round, thumped 13 aces to reach the semis for the first time in four years.
Czech Berdych looked to have forced a decider, having led 6-3 in the second-set tiebreak, but he then lost six of the last seven points.
“I got the early break in the first set even though the match was very close,” Lopez told reporters. “My serve was working perfectly today.
“I thought it was over at 6-3 in the tiebreak. Then I won my serve twice, I was lucky at that point as I was defending and he was hitting the ball so hard with his forehand…then came the double fault.”
Swiss Wawrinka did not have it all his own way in the opening set but eventually prevailed against Matosevic who was clearly buoyed by his impressive victory over Jo Wilfried-Tsonga in the previous round.
Once Wawrinka settled into his rhythm, though, the Australian had no answer to his strong serve and all-round class as he won five successive games in the second set.
“I’m playing good,” the top seed said. “I’m really happy with that match. I’m serving well, very aggressive.”
Wawrinka will face fourth seed Dimitrov in the semi-finals while Lopez plays Czech Stepanek.
(Reporting by Tom Hayward, editing by Tony Jimenez)