But a third-wicket partnership of 73 between Rohit (57) and Suryakumar Yadav (47), spanning a rain delay of over an hour, took India to 113-3 in the 14th over of a stop-start innings.
England, however, removed both the well-set batsmen before Hardik Pandya (23) and Ravindra Jadeja (17 not out) added useful runs late.
Axar Patel then took India past 170 with a one-handed six off Chris Jordan in the last over.
Jordan took 3-37, including two wickets in two balls, while leg-spinner Adil Rashid had fine figures of 1-25 in his maximum four overs.
Both Rohit, fresh from his blistering 92 in a victory over Australia and Kohli struggled initially to time the ball on a Providence Stadium pitch much slower and lower than the one in St Lucia, where Rohit flayed Australia's attack.
Kohli's miserable tournament with the bat continued on Thursday when, two balls after pulling Reece Topley for six, he was bowled by the left-arm quick.
Kohli has now scored just 75 runs in seven innings at the tournament at an average of 10.71.
England, who overpowered India by 10 wickets in the 2022 semi-final in Adelaide, had another success when Pant was also out in single figures after chipping Sam Curran to midwicket.
India were 65-2 off eight overs when rain stopped play, with Rohit 37 not out and Suryakumar unbeaten on 13.
When play resumed, Rohit smashed spinner Liam Livingstone for six over long-on and, on one knee, swept Curran for another remarkable six to complete a 36-ball fifty.
But with Rohit threatening to cut loose, Rashid bowled him with a googly that kept low.
Suryakumar then holed out off a slower ball from Jofra Archer into the safe hands of Jordan at long-on.
Jordan removed Pandya and Shivam Dube with successive deliveries but Patel denied him a second hat-trick in consecutive games after his treble strike against the United States.
The winners of this match will play South Africa in Saturday's final in Barbados after the unbeaten Proteas thrashed Afghanistan by nine wickets in the first semi-final.