Simon Doull's first ball accounted for Sanath Jayasuriya to a brilliant catch by wicketkeeper Adam Parore and the same combination dismissed Marvan Atapattu in the fast bowler's next over.
Then Aravinda de Silva also went for nought, caught at second slip, before Arjuna Ranatunga took control of the New Zealand attack to guide the World Cup holders to victory with nearly 10 overs to spare.
Ranatunga was unbeaten on 90, sharing in a fourth-wicket stand of 127 with opener Romesh Kaluwitharana. New Zealand captain Stephen Fleming had unaccountably taken Doull off after he collected the first two wickets in nine balls.
New Zealand made the tournament's lowest total yet, 188, with only Parore (54) resisting, after Sri Lanka chose to field first.
Muttiah Muralitharan took three for 32, and after Sri Lanka's quick bowlers delivered the first 13 overs, four spinners brought New Zealand down. Sri Lanka now meet South Africa in the first semi-final on Friday.