England, set 236 to win, finished on 233 for eight when Fernando (three for 41) bowled Ravi Bopara, whose career-best 52 off 53 balls so nearly set up an improbable win in only his fifth one-day international.
But Sri Lanka, who'd lost a one-wicket nailbiter to South Africa, held on with the 1996 champions moving a step closer to the semi-finals.
England must now try to revive their ailing bid for a last four spot against world champions Australia here Sunday.
Bopara and Paul Nixon took England to the brink of a sensational win, after they's been down and out at at 133 for six in the 34th over, with a stand of 87.
England needed 77 to win off the last 10 overs with four wickets standing, Bopara and Nixon still in when 49 were required off five.
But after wicket-keeper Nixon reversed swept Muttiah Muralitharan for a six and a four, the target was 19 off two overs.
However, when Nixon holed out off Lasith Malinga to Sri Lanka captain Mahela Jayawardene for 42 off 44 ball