The victory gave the hosts an unbeatable 3-0 lead with Monday's final match, also in Hambantota, still to come.
Batting first New Zealand struggled to 131 for eight in 32 overs in an innings twice reduced by rain interruptions.
Sri Lanka, chasing a Duckworth-Lewis adjusted target of 131 from a maximum of 32 overs, reached their target with 34 balls to spare as Kumar Sangakkara made an unbeaten 42 and Dinesh Chandimal, recalled and opening for the first time in a ODI, scoring 43.
The result meant that for the first time in ODI history three successive matches in a series have been decided using the Duckworth-Lewis method, testimony to the fact that rain has been an almost ever-present feature of the tour.
New Zealand captain Ross Taylor told the post-match presentation: "The weather didn't make it easy but Sri Lanka played smart cricket right from the toss and they put us under pressure.
"We were beaten by the better side on the day but we've still got one more match to go and 3-1 looks a lot better than 4-0.
"Hopefully the weather plays it's part (on Monday) and we can give our fans back home something to cheer about."
Sri Lanka captain Mahela Jayawardena said: "We spoke before the match about not being complacent and that we needed to execute our game-plans.
"We were lucky with the toss but our bowlers stuck to their guns, took regular wickets and put them under pressure. All in all it was a very good game for us."
Sri Lanka's margin of victory was convincing, although their top-order batsman were made to struggle by New Zealand's opening bowlers as Tim Southee (1-32) and Trent Boult (1-32) went past the edge of the bats of Chandimal and Upul Tharanga on a number of occasions without success.
The New Zealanders did not help their cause with the bat, with in-form BJ Watling (15) run out after hesitation with partner Brendon McCullum, who himself was guilty of a rash shot, drilling a ball from spinner Rangana Herath to long-on to fall for 30.
Leg-spinner Jeevan Mendis then tormented the New Zealand middle-order with three for 15 from four overs, which included the dismissal of Kane Williamson (21) and Nathan McCullum (0) in successive balls.