Kumar Sangakkara laid the foundation before Angelo Mathews completed a nervy chase as Sri Lanka beat England by six wickets in the fourth one-day international to go 3-1 up in the seven-match series on Sunday.
Sangakkara hit a sparkling 86 but it was Mathews' fine, if not flawless, captain's knock of 51 not out that helped the hosts overwhelm the 266-run victory target with two balls to spare at Colombo's R Premadasa Stadium.
James Taylor's career-best 90 and Eoin Morgan's belligerent 62 had powered England to 265 all out in 50 overs, nine of the wickets claimed by spinners.
Sri Lanka looked in trouble at 69 for two but Sangakkara and Mahela Jayawardene, who have played over 800 ODIs between them, added 96 runs for the third wicket to put the chase back on track.
Jayawardene dragged a Chris Jordan delivery onto his stumps to depart, while Sangakkara perished chasing a wide delivery from the same bowler.
England maintained the pressure and were nearly rewarded but Alex Hales spilled a Mathews catch in the 46th over from an exasperated Jordan.
Despite conceding 20 extra runs including 12 wide balls, the visiting bowlers showed enough fight to take the game to the last over but Mathews hit Steven Finn for a boundary to bring up his 50 and seal victory.
Earlier, regular England captain Alastair Cook's suspension, due to a slow over-rate offence, handed Taylor an opportunity and the 24-year-old grabbed it.
Opting to bat first, England wobbled early as Hales fell for a golden duck and the in-form Moeen Ali (19) was sent back by Tillakaratne Dilshan (3-64).