Lasith Malinga claimed five for 44 to restrict England in Dambulla.
Captain Morgan, who last reached three figures 29 innings ago in May 2017, applied himself impressively against the home side’s unpredictable attack but fell eight short of his century when he toe-edged a return catch to 35-year-old Lasith Malinga.
The veteran paceman rolled back the years to claim figures of five for 44 in Dambulla, which had also hosted the washed out series opener, having also accounted for Jason Roy, Moeen Ali, Chris Woakes and Liam Dawson.
England had done well to build a strong foundation after being sent in to bat, Joe Root contributing a hard-working 71, but struggled in the latter stages.
The final 10 overs saw the tourists score 69 runs for the loss of five wickets, with last-wicket pair Adil Rashid and Olly Stone adding a potentially important 24 runs at the close.
Jonny Bairstow had earlier become just the sixth Englishman to reach 1000 ODI runs in a calendar year, while Root was dismissed for the first time in four matches – during which time he scored 309 runs to break Graeme Hick’s national record.
Nobody’s place is guaranteed – not even mine, says England ODI captain Morgan