Veteran Sanath Jayasuriya and Thilina Kandamby hammered India's bowlers to give Sri Lanka a morale-boosting victory by 139 runs in the tri-series.
Jayasuriya returned to form with 98 off 79 balls and Kandamby hit a blistering 91 not out from 73 balls as Sri Lanka piled up 6-307 after taking first strike in the day-night international.
India were out for 168 in reply under lights at the Premadasa stadium with medium-pacer Angelo Mathews emerging Sri Lanka's surprise trump card with a career-best six for 20.
Rahul Dravid top-scored for India with 47 but a dramatic middle-order collapse saw five wickets fall for 13 runs before the last pair of Rudra Pratap Singh and Ishant Sharma put on 29 runs.
The teams will clash again in Monday's final, having won their league games against New Zealand, the third team in the week-long series.
The defeat ruined India's hopes of going into the Champions Trophy in South Africa from September 22 as the world's number one side in the 50-over format.