Ishan, the Mumbai Indians starlet drafted in in place of the experienced Shikhar Dhawan, smashed four sixes and five fours in a name-making 56 at the top of the order while Kohli finished unbeaten on 73.
Ending things with a mighty pulled six off Chris Jordan, Kohli left 13 balls unused as he put the finishing touches to his latest masterful white-ball chase.
Forty-eight hours after keeping their opponents to 124 at the same ground, England’s attack lacked teeth and missed the raw speed of Mark Wood, absent with a bruised left heel. His replacement, Tom Curran, sent down two overs for 26 but was not alone in being dominated.
Having sent England in, India picked up a big early scalp as a minor misjudgement of line left Jos Buttler lbw to Bhuveneshwar Kumar for a golden duck.
After that setback, England would have been content with their powerplay effort of 44 for one, with Roy and Dawid Malan setting a competitive foundation. Clean strikes were thin on the ground but Roy’s clubbed six off Washington Sundar’s first ball offered some respite.
The introduction of Yuzvendra Chahal’s wrist-spin initially posed a new problem for Roy, but after smashing a drag down for six and depositing a pair of reverse-sweeps for four, he appeared to have cracked it.
Malan was unable to do likewise and was lbw on the sweep having never quite caught fire. After 10 overs England looked well set at 83 for two, but Roy narrowly missed out on a half-century for the second knock in a row when he lifted Sundar for a steepling leg-side catch.
Morgan’s arrival ushered in a chaotic period of four boundaries in eight deliveries – a mixed bag containing one sweetly-struck shot, an inside edge, a mis-field and a set of leg-byes off the helmet. There were six more when Suryakumar Yadav spilled a Jonny Bairstow chance for six.
The debutant held on when Bairstow offered a second chance off Sundar, but only after an initial fumble. India tightened up impressively at the death, allowing just two boundaries and 35 runs from the final five overs. Shardul Thakur exemplified their efforts, taking two for 13 in the heat of the 18th and 20th overs. He dismissed Morgan for 28 and Ben Stokes for 24, both visibly frustrated at their efforts.
India found things even harder at the start of the reply, Sam Curran starting with a priceless wicket-maiden that ended with KL Rahul’s tame edge behind. But, after taking just six runs from the first two overs, Ishan and Kohli powered through the gears.
One after another Jordan, Tom Curran and Stokes entered the attack and one after another they saw the run-rate climb, with their respective overs shipping 12, 16 and 17. Kohli had some luck, offering Buttler a half-chance on 10 tucking Jordan off his hips and then seeing a free-hit sail for six off a chunky leading edge, but Ishan’s joyful swings of the bat relied almost entirely on skill and timing.
Five balls after being pumped for six by the 22-year-old Stokes spurned a chance to send him back for 40, juggling a regulation catch at mid-on to deny Adil Rashid. The youngster gleefully took his extra life, launching Rashid for successive sixes to start the 10th.
His hugely impressive introduction ended moments later, trapped leg before while switching his stance. Sam Curran wrapped up his allocation impressively, finishing with one for 22, but with Kohli settled and Rishabh Pant smashing 26 in a care-free 13-ball stay, the game had slipped.
With the heavy lifting done, Kohli shepherded his side over the line. England thought they had him stumped for 54 – but Buttler and Rashid saw a close call dismissed by the third umpire. That allowed him to bring things to a close in a blaze of glory – whipping the off-colour Jordan through square leg then thrashing a short ball into the stands.