Michael Vaughan's men were put on the victory path by a fine bowling display from paceman Sajid Mahmood (3-27) and left-arm spinner Monty Panesar (3-25) that saw Bangladesh bundled out for just 143.
But they then found batting tough against qualty spin from Abdur Razzak (2-30) and Mohammad Rafique (2-33) before wrapping up the victory after 44.5 overs.
From a well-set 70-2, Razzak started the mini-slide by dismissing Vaughan (30) and Kevin Pietersen (10) in successive overs.
Andrew Flintoff (23) hit three boundaries during his brief stay but Rafique accounted for the all-rounder and Ravi Bopara (nought) in his sixth over to leave England reeling at 110-6 with 34 still needed for victory.
However, Paul Collingwood (23) and Paul Nixon (20) held their nerve during their unbroken 37-run seventh wicket stand to ensure victory.
Paceman Syed Rasel had jolted England with the wickets of Ian Bell, who was celebrating his 25th birthday but dismissed for nought, and Andrew Strauss (23) before Bangladesh's spinners, who sparked the 67-run win over South Africa last week, caused a stir.
Victory gave England two crucial points, and more importantly kept them in the hunt for a semi-final place. This was their second win in five matches after they beat Ireland by 48 runs in Guyana.
Australia and New Zealand (eight points in four matches) are on top of the table, while Sri Lanka have six points from four matches and South Africa have six from five.
England's chances of breaking into the last four now rest on their last two matches - South Africa (April 17) and the hosts West Indies (April 21) - in Barbados.
Bangladesh were badly let down by some poor batting.
Only 20-year-old left-hander Saqibul Hasan put up resistance with an unbeaten 57. He added 47 for the seventh wicket with Mashrafe Mortaza (13) to give Bangladesh's total a degree of respectability.
Hasan's marathon 139-ball knock, had six boundaries and a six. Aftab Ahmed (10) and Abdur Razzak (15) were the only other batsman to reach double figures.
Bangladesh, with opener Shahriar Nafees replacing Javed Omar from the team which beat South Africa in Georgetown last week, lost Tamim Iqbal in the second over of the innings.
The teenager failed to keep Mahmood's short delivery down and was caught in the gully.
Iqbal made eight, and was soon followed by captain Habibul Bashar (four) to a run out off a dropped catch by Vaughan to leave Bangladesh at 23-2.
miscued drive off Mahmood was dropped by Vaughan at mid-wicket, but the England skipper threw the ball to the striker's end where Bashar, who stopped in the middle before running, was left stranded.
Nafees's failed to capitalise on the chance, and another miscued drive off Mahmood rebounded off wicket-keeper Paul Nixon's gloves to second slip where Andrew Strauss snapped up a sharp catch. Nafees made nine.
Ashraful, who scored a match-winning 87 against South Africa, edged a straight delivery from James Anderson to Nixon to end his team's hopes of a fight back.
Mushfiqur Rahim (seven) also failed to live up to the expectations as Bangladesh were struggling at 65-6 before Hasan and Mortaza gave the total some respectability.