The left-handed opener reached his second Test hundred in five matches when he cut fast bowler Ishant Sharma for his 13th four.
Skipper Mahela Jayawardene (66 not out) and Warnapura denied India success in the morning session with an unfinished 148-run stand for the third wicket after the hosts had resumed at 85-2.
Warnapura survived a leg-before appeal off spinner Harbhajan Singh when on 86 after India skipper Anil Kumble asked umpire Mark Benson of England to review the initial not-out decision under a new experimental rule.
Benson consulted TV umpire Rudi Koertzen of South Africa and was proved right.
The rule, on trial in the current three-Test series, allows players to seek a second opinion on umpiring decisions.
A batsman or fielding captain can request a review of any decision by referring it to the third official monitoring television replays.
Each team is allowed three unsuccessful review requests per innings and if one is successful it will get an additional appeal.
It was a frustrating session for India as neither their seamers nor spinners could trouble Warnapura and Jayawardene, who continued to gather runs with ease on a placid track.
Leg-spinner Kumble came closest to getting a wicket when wicket-keeper Dinesh Karthik dropped Jayawardene on 55.
The Sri Lanka captain, 16 overnight, played some attractive shots during his 31st Test half-century, cutting Sharma for two successive fours early in the day.
Jayawardene reached his 50 in style, lofting Harbhajan over long-on for the first six of the match. He also struck seven fours in his 138-ball knock.
Warnapura, who was on 50 overnight, also waited patiently to punish loose deliveries, having so far struck 14 fours in his 194-ball knock. He was on 55 when paceman Zaheer Khan held a return catch, but it was ruled a no-ball.
India introduced a double-spin attack in the second hour, but neither Kumble nor Harbhajan looked effective on a batsmen-friendly track. Kumble was economical, conceding just 26 off 15 overs.
Brief Score (at lunch,D-2):
Lanka 205/2 (Malinda Warnapura 110 n o, Mahela Jayawardene 66 n o; Ishant 1/60, Zaheer 1/66) Vs India.