The victory, sealed after the tourists bowled England out for just 207, meant that they leapfrog England at the top of the ODI rankings, having also jumped above them in Tests little over a week ago.
England, who came into the game on a 10-game winning streak, could yet reclaim that place with a series-levelling victory at The Oval on Friday, but on this showing, in which they were outbatted and outbowled at the Ageas Bowl, that will be a tall order.
The hosts made one change from the side which took to the field for 5.3 overs at the SWALEC Stadium in the opening ODI, with Samit Patel replacing Chris Woakes for a track which traditionally has taken spin.
Having been asked to field first, England bowled well, but early chances did not go their way, and South Africa's openers grinded their way into a solid position.
Graeme Smith played and missed repeatedly before finding his rhythm, while Amla accumulated quietly having seen a limited amount of the strike.
Smith eventually fell for 52, top-edging a pull stroke from Tim Bresnan which Craig Kieswetter ran round to grab, while JP Duminy (14) and Dean Elgar (15) played brief foil roles.
By this time Amla had emerged as the star of the show. He rode his luck at times, with two drops from Kieswetter when on 42 and 92 - both catchable, if not straightforward - giving him lives.
And having scored two big centuries in the Test series, Amla did not waste his opportunity. The century came from 96 deliveries, and he added another 50 from just 27 more balls before being dismissed with a couple of balls of the innings remaining. By the time he departed the crease, he had passed 3,000 ODI runs, reaching the landmark in just 57 innings - a record - and 12 innings fewer than the previous best, set by Viv Richards.
England were frustrated, with chances not going to hand, and a sense that decisions were not going their way. Graeme Swann, unable to extract much spin, was left fuming when Umpire Taufel failed to spot an edge from AB de Villiers, caught behind. It did not cost England greatly, with Swann getting his man soon after with a delivery darted in, but it did typify a performance where the rub of the green eluded them.
With 287 for five wickets on the board at the halfway stage, it looked as if the South Africans were in pole position - and the dismissal of Alastair Cook, yorked by Lonwabo Tsotsobe for a second-ball duck when the hosts came out to bat, only reinforced that.
Opening partner Ian Bell did look fluent, belting the ball around and rebuilding the innings with Jonathan Trott, but while England kept pace with the run rate, the wickets continued to tumble.
Trott flicked a ball away from Morne Morkel out to fine leg, where Elgar took a superb catch at full stretch over his shoulder, before Ian Bell was beaten by Robin Peterson by a ball that turned and struck off stump for a 41-ball 45. Ravi Bopara, having just started to show signs that he had conquered some early jitters, then became Peterson's second victim by crashing a long hop to Faf du Plessis at extra cover.
Kieswetter started brightly, with a crisp six and a vicious four, only to fall to a turner from Elgar, who was bowling just his third ball in international cricket.
Eoin Morgan struggled for rhythm before eventually slapping the part-time spin of Duminy out to midwicket, while in the next over Bresnan and Swann edged behind to Wayne Parnell for ducks.
James Anderson was run out as the crowd headed for the exits, but those who did stay were treated to same last-ditch fireworks. Finn hit Morkel for three fours in an over, all superbly timed and along the ground, before Patel launched Peterson into the stands, scoring 20 in the next over.
The fun had to end, however, and did when Patel edged Morkel behind to de Villiers for 45, with nine overs and 80 runs remaining.
England needed inspiration, and it was poignant that while they struggled, Kevin Pietersen was busy flaying the Somerset attack around for 163 on county duty for Surrey.