Set a revised 154 to win from 21 overs, Sri Lanka reached the rain-adjusted target with two overs to spare for their first win of the series.
India made 195 for five from 29 overs after an early downpour delayed the start of play, but the game was shortened again when further rain arrived during the break between innings.
Rain has played havoc with the series, with the first two matches washed out.
After veteran opener Sanath Jayasuriya gave Sri Lanka, thrashed by Australia by 128 runs in their previous match, a flying start with 27 from 13 balls they were always comfortably placed to reach the Indian total.
Jayasuriya hit two massive sixes in one Shanthakumaran Sreesanth over that went for 23.
It was a nightmare match for the fiery Indian quick, who conceded 48 runs in only three overs and was also pulled for another six by Tillakaratne Dilshan.
Although Ishant Sharma removed Jayasuriya, Dilshan's classy half-century guided his side safely to the target.
Man-of-the-m