India needed a win to stay in the tournament, which would have given them them a slender chance to play in the final on Wednesday.
That would have depended on Zimbabwe then beating Sri Lanka in the last round robin match on Monday. This game will now have no significance for the tournament, but will be a guide to form.
India's score of 268-9 was not quite enough.
Sri Lanka hit 270 with 10 balls to spare and six wickets in hand.
India now have six days to wait to play two Twenty/20 matches against Zimbabwe next weekend, which have been added on to the Tri-nations tournament.
With this latest defeat they have dropped to third place behind Australia and South Africa in the ICC ODI rankings.
Chandimal, named man of the match, punished the Indian bowlers with 111 in 118 balls. It was his maiden century in internationals and he said afterwards: "I just played my normal game, which is an aggressive one.
"
He was partnered for the third wicket of 114 by Chamara Kapudegera in a sup