Ferrer took the first set with relative ease but was broken early by the German in the second, forcing him to chase a straight-set victory in Spain.
Ferrer broke back to force a tie-break after Kohlschreiber survived a nervy final service game.
The Spaniard took a 4-2 lead in the tie-break before his opponent pushed a lob too far to hand Ferrer a big lead. Kohlschreiber fought back but a superb cross-court shot from the No 3 seed gave him three match points.
The first two were wasted by Ferrer when he sent successive shots into the net, but he made no mistake with the third and put the ball out of the reach of Kohlschreiber to take the win in Spain.
Ferrer joins Kei Nishikori in the semi-finals after Nishikori beat Roberto Bautista Agut earlier in the day.