Henry removed Rohit Sharma, KL Rahul and Dinesh Karthik in an opening spell of seven overs, with Trent Boult adding the crucial scalp of Virat Kohli as India slipped to 24/4 in their chase of 240 at Old Trafford.
Despite a valiant effort from Ravindra Jadeja (77), in conjunction with Mahendra Singh Dhoni (50), adding a World Cup record 116 for the seventh wicket, that total proved just beyond the Indians.
So rather than India heading to Lord’s on Sunday, it is New Zealand who are into the final for the second successive tournament, four years after losing to Australia.
They will either face their trans-Tasman foes in a rematch, or hosts England depending on the result of Thursday’s second semi-final at Edgbaston.
Kane Williamson had won the toss and elected to bat as expected. While New Zealand started slowly, the experienced duo of Williamson (67) and Ross Taylor (74) both shone on the big stage to help the Kiwis to 239/8.
That was always going to be a tricky chase, and when Henry removed the in-form Sharma in the second over, it became even trickier.
Boult trapped Kohli leg before an over later, with Rahul joining them back in the hutch after edging Henry behind, all three dismissed for one.
Karthik was promoted up the order to five but his attempted recovery mission with Rishabh Pant came to an end in sensational fashion as Jimmy Neesham plucked a stunning catch low to his left off Henry.
Neesham did put down Pant with a regulation catch at midwicket, but while the youngster continued to work the ball around, he eventually got bogged down by some economical bowling from Mitchell Santner and picked out Colin de Grandhomme in the deep off a heave across the line.
That brought Dhoni to the crease, but Pandya fell in similar fashion to Santner, Williamson getting under a mistimed swipe.
Jadeja joined Dhoni in the middle and brought India back into the game with 77 from 59 balls to give his team a chance but when he holed out to Boult in the 48th over and Dhoni was sensationally run out by Martin Guptill the following over, India’s hopes went with them.
Rain had ensured that the match could not be completed in a single day, with New Zealand making 211/5 in 46.1 overs on Tuesday before the heavens opened.
That included a fine knock from Williamson in tricky conditions, first rebuilding with Henry Nicholls (28) after Guptill had departed for one, before kicking on with Taylor.
Runs were hard to come by though, and as Williamson tried to up the rate he sliced one to Jadeja off Yuzvendra Chahal.
Jadeja, who kept his place in the team after the win over Sri Lanka, had earlier removed Nicholls with a beauty, but the turn the spinners enjoyed would prove to be a good sign for Santner.
Neesham (12) and then De Grandhomme (16) added useful runs alongside Taylor before the rain came down and ended hopes of a completion.
Coming back on the Wednesday, New Zealand had 23 balls to add to their overnight score of and they set about doing just that with some quick running from Latham and Taylor.
However a sensational piece of fielding from Jadeja ended their stand at 25, the all-rounder racing in from the midwicket boundary and firing a direct hit to leave Taylor short of his ground.
Bhuvneshwar Kumar added Henry to his victims to finish with 3/43, but it was Henry who had the last laugh thanks to his stunning opening spell.
Scores in brief:
New Zealand beat India by 18 runs, at Old Trafford, Manchester
New Zealand 239/8, in 50 overs (Ross Taylor 74, Kane Williamson 67; Bhuvneshwar Kumar 3/43, Ravindra Jadeja 1/34, Jasprit Bumrah 1/39)
India 221 all out, in 49.3 overs (Ravindra Jadeja 77, Mahendra Singh Dhoni 50; Matt Henry 3/37, Mitchell Santner 2/34, Trent Boult 2/42)
Player of the match: Matt Henry (New Zealand)