The tourists slipped from 74-2 to 75-5 before skipper Ross Taylor (53 not out) and debutant Todd Astle (32 not out) took their team to 154-5 in their second innings at tea for an overall lead of 322 at the P Sara Oval here.
The pair added 79 for the unfinished sixth-wicket stand after Sri Lankan fast bowler Nuwan Kulasekara and left-arm spinner Rangana Herath struck in quick succession in the afternoon.
Kulasekara had Kane Williamson (18) caught by Tharanga Paranavitana in the slips and then trapped Daniel Flynn leg-before with the last two balls of his eighth over.
Herath then struck with the second delivery of the next over, having Kruger van Wyk caught by Paranavitana at leg-slip for a duck for his second victim of the innings.
Herath also had Brendon McCullum stumped by Prasanna Jayawardene after the batsman had cracked seven fours in a brisk 43-ball 35.
Martin Guptill (11) was first to be dismissed, caught by Tillakaratne Dilshan on second attempt at gully off paceman Shaminda Eranga.
Tim Southee earlier finished with 5-62 for his third five-wicket haul in a Test innings and left-arm paceman Trent Boult with 4-42 as Sri Lanka were bowled out for 244 in their first innings in reply to New Zealand's 412.
New Zealand needed just 7.4 overs of pace in the morning to claim the last four wickets for 19 after the hosts had resumed at 225-6, with Boult taking three and Southee one.
Boult struck in successive overs when he had middle-order batsman Thilan Samaraweera (76) caught by Guptill at second slip and then trapped Suraj Randiv (39) leg-before.
Samaraweera fell at his overnight score while lower-order batsman Randiv made just five in the morning. The pair added 97 for the seventh wicket.
Southee then had Kulasekara (six) caught by Taylor at first slip before Boult ended the innings with the wicket of Herath (five), who fell to a brilliant left-handed catch by Williamson at gully.
Sri Lanka lead the series 1-0 following their 10-wicket victory in the opening Test in Galle.