The home side began day three at 43-3 in reply to New Zealand's first-innings total of 412 and edged past 100 before Southee struck twice in quick time.
Southee dislodged opener Tharanga Paranavitana for 40 when he was caught behind by Kruger van Wyk. Angelo Mathews was next to go for 47 as Martin Guptill produced a stunning one-handed catch in the slips to give Southee his fourth scalp of the innings.
Jeetan Patel looked to have Prasanna Jayawardene stumped following some sharp work from van Wyk, but despite countless replays the third umpire couldn't see enough evidence to send the Sri Lanka No 7 on his way and he was given not out.
Sri Lanka closed the session at 107-5 with Thilan Samaraweera and Jayawardene unbeaten at the crease on zero and four respectively.
The home side need another 106 runs to avoid the follow-on.
Southee, who has been in good form recently after he took 4-46 in the first innings of the first test last week, went to lunch with figures of 4-35 next to his name.