Evans, who initially lost in qualifying but was handed a lucky-loser spot, secured a magnificent win, beating the world number 27.
He will now face either Tommy Haas or qualifier Andrey Kusnetsov for a place in the final.
The 23-year-old Evans broke the German's serve in the fifth game of the opening set and, despite struggling to see out his service game, finally held to seal the set.
Evans suffered a second-set lapse, however, and was comfortably beaten 6-2 as Kohlschreiber asserted his dominance going into the third and final set.
But an early break in the third stanza gave the Brit hope, and although he wasted two match points, he finally sealed victory with a huge forehand down the line.