The 26-year-old stormed home with a 65, firing an eagle and six birdies to record his 21st top-10 finish.
He finished tied with Garcia on 17-under 271, with the Spaniard -- seeking his 11th European Tour win and first since 2011 -- closing on 66.
"Chris hit a great drive and a great six iron and then a wonderful putt," said Garcia, who would have returned to the world's top 10 for the first time in more than three years if he had won.
"Obviously he's been trying for a while and he deserves it, and after the start he had today, it's quite impressive for him to come back the way he did and win. I gave it my best effort."
World No. 4 Justin Rose, the highest-ranked player in the field and runner-up in Abu Dhabi last weekend, tied for 16th.
Meanwhile, the third round of the PGA Tour's Farmers Insurance Open was delayed by fog on Saturday.
Only a handful of players made it out onto the course before play was suspended, with halfway leader Tiger Woods holding a two-shot advantage after 36 holes as he and most of the field waited for their new tee-off times.