After an exchange of breaks in the opening games, the 74th-ranked Garcia-Lopez broke the Latvian twice to win the first set.
Garcia-Lopez took a 4-1 lead in the second but Gulbis won five consecutive games to even the match. He then dominated the third set and sealed the victory on his first match point with a service winner.
The 36th-ranked Gulbis was playing in his second final since winning his third title in Delray Beach in February.
Garcia-Lopez was looking for his third title. He last won in 2010 in Bangkok.