The hosts, who bowled out Bangladesh for 131 in the first innings, replied with 161-2 by lunch on the third day, a lead of 30 runs with eight wickets in hand.
Kumar Sangakkara and captain Mahela Jayawardene put on 87 for the unbroken third wicket before a brief shower over the Asgiriya stadium halted play five minutes before lunch.
Left-handed Sangakkara followed up his century in the second Test with 47 not out.
Jayawardene, who survived a confident leg-before appeal on zero, was unbeaten on 52 with a six off Shahadat Hossain and five boundaries.
Sri Lanka, seeking a 3-0 sweep of the series after winning the first two Tests, were frustrated by rain interruptions on the previous two days which restricted play to only 57.3 overs.
Bangladesh's left-arm seamer Syed Rasel, who moved the ball about in overcast conditions, was rewarded with the wickets of openers Upul Tharanga and Michael Vandort in his opening spell of 10 overs.
Tharanga, returning to the side after missing the previous two Tests with a heel injury, made 12 when he shouldered arms to an incoming ball and was given out leg-before by Indian umpire Suresh Shastri.
Vandort, who took the help of a runner due to an ankle injury sustained while batting on Thursday, took his overnight score of 25 to 43 when he was bowled by Rasel to make Sri Lanka 74-2.
Rasel was unlucky not to get a third wicket when Shastri turned down an appeal for leg-before against Jayawardene before the Sri Lankan captain had got off the mark.
Television replays indicated it was a marginal decision that could have gone either way.
Brief Scores (at lunch, D-3):
Bangladesh Ist innings 131 Vs Sri Lanka 161 for 2 (M Jayawardene 52 n o, Sangakkara 47 n o, Vandort 43; Syed Rasel 2 for 49).