Spain's Garcia, who won the Masters last month, carded a six-under-par 64 to go eight under par, tied for sixth.
Jason Day struck the day's best round with a 63 to reach 10 under, but world number one Dustin Johnson drifted to seven shots off the lead after a 71.
Overnight leader Jason Kokrak blew a five-shot lead after he fired a 72.
The American, who had carded a career-best 62 on Friday, went round in 10 more shots on day three in a round in which he triple-bogeyed the par three fifth.
Fellow American Hahn, 35, who is in line to add to his two PGA Tour titles, struck six birdies in his six-under-par 64 to lead on 12 under, one ahead of compatriot Billy Horschel.
England's Ian Poulter moved to one under with a 68, and is tied for 42nd place.
Defending champion Sergio Garcia went round the back nine holes in 29 to move within four shots of leader James Hahn at the Byron Nelson event in Texas.