Rain and an on-field injury which prevented South African opener Hashim Amla from batting spurred Sri Lanka to a 17-run win under the Duckworth-Lewis method in the second one-dayer on Tuesday.
Sri Lanka grabbed a 2-0 lead in the five-match series after rain played havoc with the schedule, delaying the start by 25 minutes before forcing further interruptions.
The hosts elected to bat first but struggled to reach 223 for nine wickets on a sluggish pitch.
South Africa were set a target of 176 from 29 overs under the D/L method but they suffered a major setback even before they could start their run chase as Amla injured his knee while fielding and could not open the batting.
Amla, who slipped and fell on his knee in the 43rd over, was taken to hospital for a precautionary x-ray.
In his absence, Robin Peterson was pushed up the order and while that meant he became the first spinner to open both the batting and the bowling for his country, he could not stop South Africa floundering as he perished in the opening over for three.
They slumped to 104 for five after 21 overs when rain returned for a third time with the tourists 17 runs short of a revised victory target of 121.
The wet pitch was hardly ideal for a limited-overs game and the 43 runs apiece from Sri Lanka's Tillakaratne Dilshan and Dinesh Chandimal were the highest individual scores.
Dilshan's knock off 64 balls comprised one four and no batsman struck a six during the 71 overs.
The wet outfield did not help either because many of the shots which would have gone for four stopped short of the ropes.
Man of the match Chandimal took chances and managed four fours off 51 balls while team mate Kumar Sangakkara made 37 off 60 balls with six fours but boundaries were hard to come by.
Morne Morkel (3-34) was again South Africa's top bowler picking up both openers and the wicket of Chandimal.
South Africa's fielding was an improvement on the first ODI but it came at a price when Amla jarred his left knee trying to stop a Chandimal boundary and was helped off the field limping.
Amla had returned to the side in place of Colin Ingram after missing the first ODI with a stiff neck.
The teams will now travel to Pallekele for the third and fourth ODIs scheduled for Friday and Sunday.