England thought that they had dismissed Mahela Jayawardene on his first ball, but the third umpire ruled him not out, which allowed Sri Lanka to storm to 35-1.
After Jayawardene was sent packing following a Chris Jordan delivery, England began to collect wickets, but they were handed a target of 190 to win as Sri Lanka reached the end of their innings with the loss of four wickets.
What looked like a whimpering defeat for England began to turn around when Alex Hales led his side's attack with them needing 148 off 81 deliveries.
Eoin Morgan (57) also upped the run-rate as his partnership with Hales left England on 152 until Kulasekara grabbed his third wicket, causing Morgan to leave the field after hitting seven boundaries and two sixes.
Kulasekara swiftly snatched a fourth dismissal as Joss Buttler lasted for just two runs, but it was Hales who made history by becoming the first England batsman to score a century in Twenty20 international cricket.
Bopara ended on 11 not out, but Hales will take the headlines as he scored 11 boundaries and six sixes to reach an unbeaten 116 from 64 balls in Chittagong.