A second hundred in six matches means Sri Lanka take a 2-1 lead in the ODI series with a six-wicket win.
Chandimal century gives Sri Lanka lead over England
Sri Lanka, chasing 247 for victory, finished on 249 for four.
Chandimal secured the win, with 10 balls to spare, after flamboyantly going down on one knee to carve James Anderson over cover for four.
His innings was the 21 year old's second century in just six matches at this level and meant he had converted both his fifties into hundreds.
England's total of 246 for seven, which featured captain Alastair Cook's career-best 119, never looked enough.
Their score was put into perspective by a Sri Lankan second-wicket stand of 112 between Chandimal and veteran opener Mahela Jayawardene, who made 79.
Jayawardene, whose career-best 144 set-up Sri Lanka's 69-run win at Headingley on Friday, was again in superb touch.
He uppercut Anderson for four in the first over of the tourists' reply before Sri Lanka captain Tillakaratne Dilshan was bowled for three by medium-pacer Tim Bresnan.
Jayawardene reached his fifty at Lord's in just 45 balls with seven fours.
Meanwhile an increasingly confident Chandimal audaciously flicked seamer Jade Dernbach over his shoulder for four and then thrashed him wide of midwicket for another impressive boundary.
But with Jayawardene on course for back-to-back hundreds, he cut a Dernbach long-hop straight to Eoin Morgan at point.
In all he faced 77 balls with nine fours.
Chamdimal himself continued on to a 73-ball fifty and later struck Anderson, England's spearhead, for six over midwicket.
He was dropped by leaping wicketkeeper Craig Kieswetter on 92 when he didn't get enough on an intended 'scoop' shot.
Their was a bizarre end to the match as Angelo Mathews, who took 21 balls for his one not out, 'nursed' Chandimal to his century.
But Chandimal went to his hundred in style, hoisting Bresnan for six over long-on to reach three figures in 123 balls, with two sixes and 10 fours.
Earlier, a fine Sri Lanka bowling effort saw leg-spinner Jeevan Mendis and seamers Lasith Malinga and Suranga Lakmal all take two wickets apiece.
England's total would have been far worse had left-handed opener Cook not been dropped on 15 by Jayawardene at slip.
No other England batsman made more than Kevin Pietersen's 41 in an innings where a top-order collapse saw the hosts slump to 85 for four.
Cook was run out going for a bye by wicketkeeper Kumar Sangakkara.
In all he faced 143 balls with 13 fours.
This was only the 26-year-old Cook's second century in 29 ODI innings and his highest, surpassing the 102 made against India at Southampton in 2007.
Cook, having seen England well beaten when he won the toss and fielded at Headingley, opted to bat first at Lord's.
But England had as much trouble setting a competitive total as they had endured chasing one 48 hours earlier in Leeds.
Pietersen dominated a third wicket stand of 49, of which Cook's share was just seven, before Mendis checked England's recovery.
First he induced Pietersen, who faced just 43 balls, to sky a sweep to deep square leg where Suraj Randiv held a well-judged catch and then had Morgan lbw for four.
The series continues with a day/night match at Trent Bridge on Wednesday.
A Cook run out (Sangakkara) 119
C Kieswetter c Lakmal b Malinga 3
J Trott c Dilshan b Lakmal 2
K Pietersen c Randiv b Mendis 41
E Morgan lbw b Mendis 4
I Bell c Kulasekara b Lakmal 30
T Bresnan b Malinga 26
S Broad not out 1
G Swann not out 11
Extras (b4, w5) 9
Total (7 wkts, 50 overs) 246
Did not bat: J Anderson, J Dernbach
Fall of wickets: 1-18 (Kieswetter), 2-30 (Trott), 3-79 (Pietersen), 4-85 (Morgan), 5-157 (Bell), 6-232 (Cook), 7-237 (Bresnan)
Bowling: Mathews 1-0-4-0; Malinga 10-1-54-2 (1w); Kulasekara 10-1-40-0 (3w); Lakmal 10-0-62-2 (1w); Mendis 10-0-40-2; Randiv 8-0-33-0; Kandamby 1-0-9-0
M Jayawardene c Morgan b Dernbach 79
T Dilshan b Bresnan 3
D Chandimal not out 105
K Sangakkara c Morgan b Swann 25
T Kandamby lbw b Swann 11
A Mathews not out 1
Extras (lb7, w18) 25
Total (4 wkts, 48.2 overs) 249
Did not bat: J Mendis, N Kulasekera, S Lakmal, S Randiv, L Malinga
Fall of wickets: 1-21 (Dilshan), 2-133 (Jayawardene), 3-194 (Sangakkara), 4-230 (Kandamby)
Bowling: Anderson 9.2-0-55-0 (1w); Bresnan 9-0-48-1; Broad 10-0-52-0 (8w); Dernbach 10-2-55-1 (8w); Swann 10-0-32-2 (1w)
Result: Sri Lanka won by six wickets
Man-of-the-match: Dinesh Chandimal (SRI)
Series: Sri Lanka lead five-match series 2-1