Monfils staved off a match point in the second set en route to his first victory since February 2014 at at Montpellier, France. The second-seeded Frenchman's victory also was his first in an ATP 500 tournament event.
Karlovic, 37, a winner last week at Newport, R.I., was denied in his bid to become the oldest man to win back-to-back tournaments since 43-year-old Ken Rosewall in 1973.
Appearing in his 25th career final, Monfils turned the momentum in his favor with Karlovic serving for the match at 5-4 in the second set. Monfils broke the 13th-seeded Croatian, marking the first time Karlovic failed to hold serve on 54 occasions in the tournament.
A runner-up at this event in 2011, Monfils won the tiebreaker and broke Karlovic again early in the third set before going on to his sixth career ATP title.
Monfils, who will turn 30 in September, had lost eight of his previous nine tournament finals.
The tournament is the first clay-court title of Lopez's career, and his fifth overall crown.
Lopez needed just 77 minutes to dispatch of Haase.
Haase took a 3-0 lead in the second set before Lopez rallied to win the next three games and went on to finish off the match.
Fourth-seeded Fabio Fognini rolled to a 6-4, 6-1 victory over Slovakia's Andrej Martin in the championship match of the Croatia Open at Umag.
The title is the fourth ATP crown for the 29-year-old Italian.
Fognini won the final two games of the first set and cruised during the second to finish off a 68-minute victory.