Kusal Mendis took charge after an early wicket and slammed a quickfire half-century, off 44 deliveries.
England captain Eoin Morgan won the toss and elected to field. Moeen Ali was brought in for Chris Jordan.
Kusal Perera was run out early by Jonathan Bairstow.
Angelo Mathews finished unbeaten on 67 off 54 balls to propel Sri Lanka to 305 for 5.
Moeen Ali took the catch to send Danushka Gunathilaka back for 62.
David Willey got rid of Chandimal and Seekkuge Prasanna in his successive overs.
Dinesh Chandimal added a quickfire 63 off 51 deliveries before losing his wicket to David Willey.
Adil Rashid took out both the set batsman - Mendis and Gunathalika - soon after the two-hour rain break.
Joe Root of England bats during the 4th ODI Royal London One Day International match between England and Sri Lanka at The Kia Oval on June 29, 2016 in London, England.
In the absence of Alex Hales, who was nursing a back injury, Roy gave England a solid start.
Joe Root contributed 65 to the 149-run stand for the second wicket.
Danushka Gunathilaka broke the 149-run second wicket stand.
Jason Roy scored his second century of the series.
Roy surpassed David Gower's 158 to register England's highest individual score in ODI cricket but narrowly missed the 26-year-old English record of all-time highest - Robin Smith's 167 not out (55-over game).
Jonathan Bairstow finished off the formalities with an unbeaten 29 as England won by 6 wickets and claimed the five-match series 2-0.