The unseeded Croat earned his third career victory in four attempts against the third-seeded German, needing one hour and 37 minutes to gain the triumph.
The 28-year-old Karlovic, ranked 108 in the world, raised his record to 6-12 against top 10 players, including three straight wins.
In Saturday's semi-finals, Karlovic will meet 84th-ranked Albert Montanes, who defeated American Vince Spadea 6-4, 6-4.
Argentine Mariano Zabaleta, a 6-1, 6-2 victor over Juergen Melzer of Austria, will face American James Blake in the other semi-final.
The second-seeded Blake overcame a second-set disaster to bounce number eight Juan Monaco of Argentina, 7-6, 1-6, 7-6.