India go to the top of Group 2 and can clinch a semi-final spot with a win against Zimbabwe in their final Group 2 match on Sunday after Bangladesh faltered in their revised chase of 151 in 16 overs.
Kohli’s unbeaten 64 had steered India to 184-6 but Bangladesh had looked on course for victory after racing to 66-0 in seven overs when rain stopped play causing four overs to be lost.
Opener Liton Das hit a 27-ball 60 but his run out after the 50-minute interruption heralded a Bangladesh collapse and ended on 145-6.
Needing 20 off the final over, Nurul Hasan gave them hope with a six and a four but left-arm quick Arshdeep Singh held his nerve on the last ball to hand India their third win in four matches.
It leaves Bangladesh all but out of the semi-finals picture.
Das gave the team a blazing start, reaching his fifty in 21 balls, but once he fell to KL Rahul’s direct hit India came roaring back.
Arshdeep struck twice in one over including the prize of captain Shakib Al Hasan for 13 to turn the tables.
Hardik Pandya took two wickets in the 13th over as Bangladesh slumped from 98-2 to 108-6 and despite Hasan’s 14-ball 25, fell short of their DLS method target.
It was Kohli, who hit an unbeaten 64, and KL Rahul with a blazing 50 that set up India’s victory with a stand of 67.
In the process, Kohli overtook former Sri Lanka captain Mahela Jayawardene’s total of 1,016 runs to become the highest scorer in T20 World Cup history.
Jayawardene set his mark from 31 innings but Kohli took only 23 to pass him.
The in-form Kohli, who had already hit two match-winning half-centuries at this World Cup, reached his third fifty in 37 balls to bring alive the Indian-dominated crowd at the Adelaide Oval.
Taskin Ahmed kept India pinned down early with an impressive opening burst of seam and swing bowling after Bangladesh elected to field.
Rohit Sharma went cheaply for two but Rahul went on the counter-attack to regain his batting touch with a flurry of boundaries.
Rahul, who had scored just 22 runs in the previous three matches, smashed two sixes and a four in a 24-run ninth over as the Indian run rate soared.
He reached 50 off Shakib but fell on the next ball from the left-arm spinner after hitting three fours and four sixes.
There was no respite for the Bangladesh bowlers as Suryakumar Yadav joined Kohli to keep up the attack, nonchalantly hitting the ball to all parts before Shakib struck again when he had made 30 off 16 balls.
Kohli anchored the innings and Ravichandran Ashwin enjoyed himself in a six-ball cameo for 13 that included a six and four in the final over.