Sri Lanka crushed South Africa on Tuesday to open the tournament, and its stunning follow-up defeat left Group B wide open.
England, Sri Lanka and South Africa have one win each, and New Zealand's still a threat. Only two teams proceed to the semifinals next week.
England's bowlers did an admirable job after captain Andrew Strauss won the toss and fielded at Wanderers Stadium. Although Sri Lanka recovered to 212 all out in the 48th over, England was seldom flustered in its run chase and reached 213-4 in the 45th over.
"This is a fast-scoring ground and we had to keep sensible and not do anything too rash," Strauss said. "It was a sensible and professional chase."
Sri Lanka captain Kumar Sangakkara complimented his side's fightback at the crease.
"To reach 212 was fantastic," he said. "We are probably firing on about 80 percent. We have a lot of homework to do before the next game. We played well ... but we need to be flexible."
The English overcame a bad start. Joe Denly played across a Nuwan Kulasekara ball to be trapped lbw for 5 in the fourth over, while Strauss, on 9, pulled Kulasekara fiercely only to be well taken at short midwicket by Thilan Kandamby.
But three good partnerships followed.
Allrounder Paul Collingwood, who hit 46 off 51 balls including five fours and three sixes, added 63 for the third wicket with Owais Shah before he edged the ball onto his stumps off fast bowler Lasith Malinga.
Shah contributed 44 off 74 balls, scoring slowly but steadily. After Collingwood's dismissal, Shah put on 76 in 15.2 overs for the fourth wicket with left-hander Eoin Morgan.
Morgan stayed until the target was reached. He finished 62 not out beside wicketkeeper Matt Prior, who was 28 not out. The pair added 55.
Strauss said the aggressiveness of man-of-the-match Collingwood lifted England's spirit, and he also praised Shah and Morgan.
"Morgan has played a lot of innings like that over the years at Middlesex but it is nice to see him transfer that into the international format," Strauss said.
Kulasekara took 2-42, Angelo Mathews was the most economical with 26 conceded off eight overs, and Muttiah Muralitharan was pounded for 60 off his 10.
Collingwood said England handled spinners Muralitharan and Ajantha Mendis well.
"It was going to be difficult chasing because the ball was doing a bit," he said, "but Morgan did very well to see the boys home."
Earlier, Kandamby scored 53 and shared in two half-century partnerships to help Sri Lanka recover from 17-4 to 212.
After England opening bowlers Jimmy Anderson and Graham Onions took two wickets each by the sixth over, Kandamby put on stands of 64 with Thilan Samaraweera (30) and 72 with Mathews (52) on a lively pitch.
First-change bowler Stuart Broad claimed 3-49 off 10 overs. Anderson finished with 3-20 off 9.3 overs, and Onions 2-58 off 10.
At the start of the match, there was considerable bounce and movement in the pitch that troubled opening batsmen Tillakaratne Dilshan and Sanath Jayasuriya.
Jayasuriya was caught behind for a second-ball duck off Anderson on the 11th delivery of the innings. Four balls later, Dilshan was caught by Morgan for 2, leaving Sri Lanka at 7-2.
Anderson trapped Mahela Jayawardene in front for 9 in the fifth over with the total on 17, and Sri Lanka was in even more trouble two deliveries later when Sangakkara inexplicably drove at a very wide ball from Onions and was out for 1.
Kandamby and Samaraweera began rebuilding the innings, and Samaraweera was out driving Broad to point where Collingwood took an easy catch at head height at 81-5. Samaraweera hit four boundaries in 48 balls.
Kandamby and Mathews more than doubled the score before Kandamby was run out in a mid-pitch mix-up thanks to Luke Wright's accurate throw to Prior. Kandamby faced 82 balls, hitting five fours, and Sri Lanka was 163-6.
Mathews was controversially run out then called back on 51 with the total on 170-6. He bumped into Onions in going for a second run, and it was debatable whether he would have completed the run safely.
Strauss called him back, however, and Mathews was caught behind five balls later.
On Saturday, India plays Pakistan, and Australia meets West Indies.