After being reduced to 8-2, they posted a score of 255-7, with Davies and Ben Foakes (90) sharing a stand of 130.
Yorkshire's run-chase was undermined by a three-wicket burst in nine balls from Stuart Meaker, whose victims included Jonny Bairstow and Gary Ballance.
Tim Bresnan made 68 but was the last to go as they were all out for 236.
Having lost to Durham in the T20 Blast semi-finals last weekend, Yorkshire were hoping to atone by reaching Lord's for the first time since 2002.
They made the ideal start as Dominic Sibley and Kumar Sangakkara went inside the first three overs, the Sri Lankan making only four before needlessly giving a catch to cover.
But they were left to rue Matthew Waite dropping Davies, then on 43, off his own bowling just after having Rory Burns caught on the boundary.
Davies went on to hit a six and 10 fours before finally falling to Waite, who took 3-48 and also dropped a more difficult return chance offered by Foakes.
After losing Adam Lyth early, Yorkshire were well-placed on 75-2, but fast bowler Meaker (3-61) turned the game on its head by ripping out Bairstow (13), who lobbed tamely to mid-wicket, Ballance (32) and Jack Leaning.
Bresnan and Waite (38) did their best to repair the damage, but 27 off the final three overs was too much and Bresnan holed out at long-off with seven balls remaining.
Surrey skipper Gareth Batty told BBC Radio London:
"Everyone is stepping up to the plate when the team requires, everybody's pulling together.
"Davies and Foakes were quite magnificent, that partnership blew the game wide open.
"The position we got ourselves to, I thought we should maybe have been 265 or 270.
"But we got wickets at the right times and it was always going to be an uphill battle for them once it got down to those final overs."
Yorkshire captain Alex Lees:
"We are all gutted. We have played some great white-ball cricket this season, but when it has mattered we haven't been good enough.
"The bowlers were exceptional and we thought it was a reachable target. We needed someone in the top five to make a contribution and we would have reached the target comfortably."
Opener Steven Davies hit 104 off 116 balls as 2015 runners-up Surrey reached another One-Day Cup final with a 19-run win over Yorkshire at Headingley.