The world number five went down 4-6 6-3 6-1 after over two hours on court.
Neither player started particularly well, exchanging service games at the start of the match before regaining their control as the opening set wore on.
Garcia-Lopez was the man holding his serve more easily but failed to do so when it counted, as Berdych broke at 5-4 to take the opener.
The second set started in opposite fashion to the first as both men raced through their opening service games to reach 3-3. Berdych battled hard in the next game, saving two break points before finally losing his serve, and then failing to hold again at 5-3 as Garcia-Lopez levelled the match.
After missing a break-point chance at the beginning of the final set, Berdych somehow hung on to his own service game to make it 1-1. After that though, Garcia-Lopez took charge, moving Berdych around the court with ease and breaking twice to seal the set 6-1.
The Spaniard will now face Novak Djokovic in the quarter-finals after the world number two beat Pablo Carreno-Busta in straight sets.