The hosts, who won the opening ODI by 180 runs, reached 223 before the weather ended their innings with one wicket and four balls remaining, Tillakaratne Dilshan and Dinesh Chandimal top-scoring with 43 apiece.
The players had been off the field for two hours by the time the revised target was announced, but that was not enough time for South Africa to get Hashim Amla back from a hospital where he had been having scans on a groin and knee injury suffered while fielding.
The prolific Amla was a late inclusion in the Proteas team having suffered muscle spasms in his neck in the lead-up to the game but the new injury, suffered while trying to cut off a Chandimal boundary in the 43rd over, prevented him from opening the innings and left uncertainty as to whether he would bat at all. Robin Peterson was promoted in his absence.
Upul Tharanga fell early in the innings to a spectacular Peterson catch but Dilshan and Kumar Sangakkara (37) put on 59 for the second wicket before the latter sliced Aaron Phangiso to Alviro Petersen at extra cover.
Mahela Jayawardene (17) put on 40 with Dilshan, who fell to a wonderful catch from wicketkeeper AB de Villiers to become Morne Morkel's second victim. His 64-ball innings unusually contained only one boundary.
Chandimal received little support, with Lahiru Thirimanne (13) and Jehan Mubarak (eight) unable to stick around as the bowlers dominated.
Colin Ingram, left out in favour of Amla, emerged as 12th man following the latter's injury and caught Thisara Perera (11) off Chris Morris, before Morkel (three for 34) ended Chandimal's 51-ball knock.
The tall paceman then ran out Rangana Herath for 13 and, after Ryan McLaren's next ball disappeared for three wides, the innings was called to a halt.