Duckett struck 167 off 132 deliveries, registering his second successive hundred and the highest individual score of his ODI career. His innings propelled England to 386-5, although they narrowly missed out on reaching the 400-run milestone.
The opener shared 163 runs with Tom Banton, who contributed 74 before playing the ball onto his stumps. Harry Brook added 44, while Jordan Cox provided late impetus with 43 from just 27 balls. Will Jacks also chipped in with 30, with Joe Root not needed during the innings.
Sri Lanka's response threatened to produce another memorable chase after their successful pursuit of 430 against England a week earlier.
Pavan Rathnayake, who had scored 130 in that encounter, continued his impressive form with 118 from 77 balls. Kusal Mendis also played a significant role, making 89 as the hosts kept pace with the required rate for much of their innings.
However, the contest turned when Dawson removed Rathnayake in the 45th over. England capitalised on the breakthrough, with Sri Lanka losing their final five wickets for only 16 runs before being dismissed for 331.
Despite needing 87 runs from the last 10 overs, Sri Lanka could not maintain their challenge, allowing England to successfully defend their substantial total.
Sri Lanka will now turn their attention to Sunday's tri-series final against Pakistan, having put their bowlers through a demanding workload in the Lahore heat. England, meanwhile, will head to Australia in November for a tour comprising three ODIs and five T20 internationals.