Earlier, half-centuries by Lahiru Thiramanne and Tillakaratne Dilshan and an unbeaten 49 by Angelo Matthews powered Sri Lanka to 289/6.
Virat Kohli, who was made to bowl the last over of the Sri Lankan innings, conceded 14 runs.
India’s run chase got off to a disastrous start as stand-in captain Virender Sehwag fell in the second delivery.
Sri Lanka is now on par with India on 10 points but has a better net run rate and moves to second place on the points table.
Australia are sitting pretty on top of the table with 14 points from 5 matches.