Kohlschreiber, the eighth seed, beat the Spaniard 7-6 (7/5) 6-4 in one hour 34 minutes.
The German did not get a look-in on his opponent's serve in the first set, but made Almagro pay for not taking his two opportunities to break.
And Kohlschreiber claimed a single break in the second to seal the win.
The 28-year-old will play Olivier Rochus in the last four after the veteran Belgian ended Benoit Paire's impressive run with a 6-3 6-7 (5/7) 7-6 win.
The 22-year-old Frenchman, currently at a career-high ranking of 92, had beaten former world number one Juan Carlos Ferrero and Juan Ignacio Chela to reach the quarter-finals.
Third seed Fernando Verdasco will resume his last-eight match with fellow Spaniard Guillermo Garcia-Lopez on Friday 3-1 up in the first set.
The winner of that match will meet the winner of the clash between top-seeded Spaniard David Ferrer and Colombia's Alejandro Falla.