Sri Lanka spinner Rangana Herath was again in the wickets as Bangladesh slipped to 158-4 in their second innings, a lead of 52, at stumps on day three of the second Test in Colombo.
Openers Tamim Iqbal and Jahurul Islam laid a solid platform for the tourists after Sri Lanka had been bowled out for 346 before lunch to claim a first-innings advantage of 106.
But seamer Shaminda Eranga (1-17) bowled Tamim for 59 to end an opening stand of 91 just prior to tea.
And left-armer Herath - who took 5-68 in Bangladesh's first innings - took centre stage in the evening session.
He bowled Mohammad Ashraful (4) and later removed Jahurul (48) and Mahmudullah (0) with successive deliveries on the way to 3-45.
Bangladesh's bowlers had impressed earlier in the day to limit Sri Lanka's first-innings lead.
Resuming at 294-6, the home side only lasted another 18.3 overs with Kumar Sangakkara - on 127 overnight - first to go for 139.
Seam bowler Abul Hasan (2-80) had Sangakkara caught behind and the lower order quickly folded, off-spinner Sohag Gazi finishing with figures of 3-111.
The two-match series is tied at 0-0 after a high-scoring draw in the first Test in Galle.