The middle-order batsman (102 not out) reached his fifth Test hundred in the last over before the break when he swung off-spinner Harbhajan Singh over mid-wicket for a four. Chaminda Vaas was unbeaten on one.
Dilshan became the fourth Sri Lankan to crack a century after skipper Mahela Jayawardene, Malinda Warnapura and Thilan Samaraweera. The hosts added 130 to their overnight total of 422-4.
It was an ordeal in the field for India for the second successive day as the tourists continued to struggle for wickets on a flat track at the Sinhalese Sports Club ground.
India got their first wicket when Samaraweera (127) cut left-arm fast bowler Zaheer Khan straight to Venkatsai Laxman at gully. The batsman added 16 to his overnight score of 111, hitting 18 fours in his 224-ball knock.
Dilshan made the most of the reprieve he earned on Thursday under a new experimental rule allowing players to seek a second opinion on umpiring decisions.
He was on one when given out caught behind off Zaheer by umpire Mark Benson of England, but asked the official to review the decision.
Benson consulted TV umpire Rudi Koertzen of South Africa before changing his decision as the ball had not made contact with the bat.
Dilshan gathered runs comfortably against a tiring Indian attack, playing attractive shots during his 146-ball knock containing one six and 10 fours.
He struck the first six of the morning, swinging leg-spinner Anil Kumble over deep square-leg and then driving the next ball through the covers for a four. He added 91 for the sixth wicket with Prasanna Jayawardene (30).
None of the Indian bowlers has so far looked impressive against the Sri Lankan batsmen. Pacemen Ishant Sharma and Zaheer, and spinners Harbhajan and Kumble each has conceded more than 100 runs.