It is the second ATP Tour semi-final of the 22-year-old Briton's career and the fifth seed will face Ryan Harrison for a place in Sunday's final.
The world number 45 was a break down in the first set when play was interrupted to give a fan medical help, but hit back to win nine of the last 10 games.
Harrison thrashed Christopher Eubanks 6-1 6-2 in their quarter-final.
American fourth seed Harrison said: "Kyle's been coming out. He was playing some amazing tennis at the end of last year and has shown some highlights of that throughout this year as well."
Kyle Edmund defeated top seed Jack Sock 6-4 6-1 to reach the last four of the 2017 Atlanta Open.