England chose to bat first, but inspired by runs from all through the order, Sri Lanka posted a more than competitive total of 169 for six wickets.
It looked like a tough chase against Sri Lanka's array of spinners, but in the end it was Malinga, the unorthodox seamer, who wreaked havoc.
He took three wickets in his first over to leave England tottering, and despite some impressive resistance from Samit Patel (67 from 48 balls) and late-order heroics from Graeme Swann (34 from 20), England were soundly beaten.
It means that the hosts advance to the semi-finals with three wins from three, while the West Indies join them after a Super Over victory over New Zealand earlier in the day.
England, who have earned a reputation for selectorial continuity in recent times, made a surprising three changes going into the game from the side who beat New Zealand two days ago: Craig Kieswetter was dropped, with Jonny Bairstow given the gloves and Ravi Bopara coming in as a batsman, while Jade Dernbach and Patel replaced Tim Bresnan and Danny Briggs.
It was a bold choice from Stuart Broad to bowl first, who were keen to test a Sri Lanka batting line-up which had been heavily dependent on Mahela Jayawardene, Tillakaratne Dilshan and Kumar Sangakkara.
In a curious move from the hosts, Sangakkara replaced Jayawardene as captain, with some rumblings that the decision had been taken to make sure Jayawardene did not risk a suspension for a slow over rate going into the semi-finals.
Dilshan (16 from 12) fell early, trapped by Steven Finn plumb in front, but Jayawardene played with typical elegance, taking Sri Lanka on to 76 for one by the halfway stage.
Swann then made a double-strike, with Jayawardene picking out Eoin Morgan at midwicket and Sangakkara given out caught behind by Bairstow the next ball. But the run rate was not stemmed as Jeevan Mendis (18 from 13) and Angelo Mathews (28 from 19) led a counter-attack.
Once again it took a double-strike, this time from Stuart Broad, to get England back on track - but Thisara Perera hit a couple of sixes to swing the innings Sri Lanka's way.
In reply Luke Wright hit a muscled four through midwicket and a six over cow corner to get England's chase going, but his dismissal to a loose cut shot, caught by Dilshan, started England's struggles.
Bairstow hit a shot rashly into the sky two balls later, caught by Nuwan Kulasekara, while Alex Hales was adjudged leg before wicket to a yorker from the very next ball, leaving England at 18 for three.
Patel, a surprise promotion to number four, led the fightback with Eoin Morgan reduced to the role of foil. They steered England to the halfway point of the innings, with Patel impressing with a series of dashing strokes over the off side, knocking mystery spinner Ajantha Mendis off his stride.
Morgan fell for a sedate innings of 10 from 15 balls, beaten by youngster Akila Dananjaya, who accounted for Stuart Broad. Jos Buttler, in between, departed after hooking Malinga down the throat of the man at fine leg, while Bopara, desperately out of touch, departed after being bowled by Jeevan Mendis for a six-ball innings worth one.
Swann and Patel kept the fight alive with the off-spinner's lusty hitting keeping England just about in touch with the required run rate.
But their exits were inevitable given the enormity of the task - and so was England's, who have rarely looked like a side capable of defending their title in this tournament.
- Samit Patel
- Sri Lanka
- Stuart Broad