Chris Woakes razed Sri Lanka's top order after Eoin Morgan hit 92 as England won the second ODI in Dambulla by 31 runs on DLS.
Woakes struck three times inside his first five overs and the rapid Olly Stone bagged his maiden wicket in international cricket as Sri Lanka tumbled to 31-4 in pursuit of England's 278-9, in which Morgan top-scored, Joe Root notched 71 and Lasith Malinga claimed 5-44.
The hosts showed some middle-order resolve but they were 140-5 after 29 overs when the rain caused a match-ending stoppage, way off the DLS target of 171, meaning Morgan's men took a 1-0 lead in the five-game series following Wednesday's washout at the same venue.
Morgan and Root had propelled England to 209-4 with 10 overs remaining but Malinga completed his eighth ODI five-for and passed 500 international wickets across all formats as the away side laboured towards the death, losing 5-36 at one stage.
Malinga had struck from the fourth ball of the match when Jason Roy - who revealed his Test ambitions before play - was too early into his shot and chipped to midwicket to depart for a duck.
The fluent Root and out-of-sorts Jonny Bairstow (26) combined to add 72 for the second wicket, during which time the latter became the first batsman to 1,000 ODI runs in 2018 and the sixth England player to reach the milestone in a calendar year, after David Gower (1983), Chris Broad (1987), Ian Bell (2007), Paul Collingwood (2007) and Jonathan Trott (2011).
Bairstow was then bowled by Thisara Perera - the sixth time he has fallen in that fashion in his previous 13 international innings - but Root and Morgan then put on 68 together, with Root completing a 29th ODI fifty from 54 balls having been dropped on 48 by Dhananjaya de Silva
Dhananjaya atoned, albeit 23 runs later, when a tiring Root ballooned the spinner to cover off a leading edge, though the 27-year-old headed off with an England record under his belt - his 309 runs between ODI dismissals beating the 301 Graeme Hick managed in 1999.
Morgan pressed on, bossing a 50-run alliance with Ben Stokes (15) and then notching a further 28 with Jos Buttler (28) but the captain's hopes of a 12th ODI ton and first against Sri Lanka were extinguished when he a toe-ended a slower ball back to Malinga.
Moeen Ali (0) was cleaned up for a golden duck next ball from a delivery that dipped in late and when Buttler was bowled by a Nuwan Pradeep full toss and Malinga pinned Woakes (5) lbw on review and castled Liam Dawson (4) with another yorker, England were reduced to 254-9.
Adil Rashid (19no) and Stone (9no) - the latter making his first contribution in a full England international after his debut game was abandoned - added an unbroken 24 for the 10th wicket, Rashid finishing the innings with back-to-back boundaries.
England's momentum carried over, with Upul Tharanga (0) snicking Woakes behind in the first over of the reply and Niroshan Dickwella (9) gloving a searing bouncer from Stone in the fourth.
Woakes picked up a wicket apiece in his third and fifth overs, Dinesh Chandimal (6) chopping on and Dasun Shanaka (8) forced to play a superb back-of-length delivery and handing Buttler his third catch of the match.
Dhananjaya (36no) showed some mettle for the home side alongside the more aggressive Kusal Perera (30 off 37) and Thisara (44no off 39), putting on 43 with the former and an unbroken 66 with the latter before the rain that had been persistent throughout forced the umpires into action.
Watch the third ODI between Sri Lanka and England, in Pallekele, live on Sky Sports Cricket (channel 404) and Sky Sports Main Event (channel 401) from 9.30am on Wednesday