Karlovic of Croatia used his big serve to beat Jiri Vesely of the Czech Republic 7-6 (6), 7-6 (7).
Kohlschreiber had lost all of his three previous matches against Istomin, but the German broke serve for a decisive 3-2 lead in the third set and held on to reach his first final of the year.
Karlovic hit his 16th ace to win the match and make it to the final of a clay-court event for the first time since 2007, when he won his only title on the surface in Houston.
The seventh-seeded Croat saved all nine break points he faced, and fought off two set points before overcoming Vesely.
The 20-year-old Vesely was the youngest player to break into the top 100 last year. The former No. 1 junior in the world, Vesely was in his first ATP semifinal.