Buttler shared an unbroken 84-run stand off 64 balls with Joe Root (48no) as the tourists overhauled a Duckworth-Lewis revised target of 236 off 33.4 overs in a match reduced to 35-overs-a-side due to rain.
The victory ends a run of seven defeats in eight matches and puts England right back in the seven-match series at 2-1 down with four games still to play.
After two defeats in Colombo, England made three changes to their line-up with Alex Hales coming in for Ian Bell, and Ben Stokes and Chris Jordan replacing James Tredwell and Harry Gurney respectively.
Just two overs of play were initially possible after Angelo Mathews chose to bat before bad light forced the players off, a thunderstorm causing a delay of three hours and 30 minutes.
England did make a breakthrough in that short spell, though, Eoin Morgan holding onto a sharp chance at point to dismiss Kusal Perera for a duck off Chris Woakes??? bowling.
Sri Lanka slipped from 6-1 to 31-3 after the resumption despite a cameo from Tillakaratne Dilshan (23 off 19 balls) when Thilina Kandamby, playing in place of Mahela Jayawardene who was granted permission to miss the game for personal reasons, was caught at slip by Jordan off Woakes.
Kumar Sangakkara ??? who scored an unbeaten 67 in Sri Lanka???s eight-wicket victory over England in Saturday???s second ODI – rebuilt well in partnership with Mathews (37), scoring his 13,000th career ODI run with a single off Woakes behind square.
Only three batsmen ??? India???s Sachin Tendulkar (18,426 runs in 463 ODIs), Australia???s Ricky Ponting (13,704 runs in 375 ODIs) and Sri Lanka???s Sanath Jayasuriya (13,430 runs in 445 ODIs) ??? have scored more.
The pair added 87 runs off 14.2 overs before captain Mathews (37) swung wildly at Jordan and feathered a simple catch behind to Buttler.
Sangakkara???s steady knock meant Sri Lanka were well set on 140-4 with 10 overs to go and he subsequently took the attack to Jordan, striking 10 fours off the first three balls of the 25th over, only to spoon a catch to mid-on Moeen Ali, undone by a well-disguised slower ball.
Lahiru Thirimanne (62 off 47 balls) kept up the momentum in partnership first with Jeevan Mendis, who made 12 before hitting part-time spinner Joe Root to a tumbling Finn and the Thisara Perera.
Thirimanne reached his fifty off 39 balls and Dhammika Prasad launched Root for successive sixes in a blistering 21 off just eight balls as Sri Lanka smashed 62 runs off the last five overs.
England???s chase began strongly as Alastair Cook, struggling with back problems, shared an 84-run stand with Ali off 11.4 overs ??? the captain strong on the drive as he struck 34 off 42 balls before edging Prasad behind.
Ali, who struck consecutive sixes off Dilshan in the 10th over, posted his half-century off 29 balls and looked well-set to go on and post his second century of the series.
But he was run out for 58 when Hales appeared not to hear his call for a single, resulting in both batsmen heading to the non-striker???s end – Ali???s attempt to regain his ground beaten by Herath???s throw.
Hales (27 off 29) and Root rebuilt, adding 41 in seven overs, but from 144-2 England slipped to 152-5 as the Nottinghamshire batsman holed out before Sangakkara anticipated a Ravi Bopara sweep to take down the leg-side.
Eoin Morgan???s average slipped to 18.60 in his last 15 ODI innings after he tamely top-edged Mathews to go for a single. But just when it seemed England had lost their way Buttler and Root came together to forge a match-winning partnership, Buttler reaching his fifty off 35 balls.
With 34 needed off 23 balls Root picked out Kusal Perera at extra cover only to be called back as Dhammika Prasad had overstepped and the reprieve cost Sri Lanka dear as the pair saw England home to a much-needed victory.
Watch the fourth one-day international between Sri Lanka and England live on Sports 2 this Sunday from 4.15am.