For a third match in succession, in the space of six days, an England hundred came in a losing cause - after Joe Root’s back-to-back performances in Centurion and Johannesburg.
Eoin Morgan’s tourists therefore lost the series, from 2-0 in front, as South Africa’s old firm AB de Villiers (101no) and Hashim Amla (59) shared a century stand to help ease to a five-wicket victory with six overs to spare.
South Africa are one of only two teams ever to have recovered previously from 2-0 down to win a five-match series, Bangladesh doing so against Pakistan 11 years ago.
Reece Topley (three for 41) took two wickets in two balls to briefly revive England hopes, after Hales’ 112 had salvaged 236 all out despite a distinct lack of support - but from 22 for three, De Villiers led a telling response with a 94-ball century.
Hales capped his hugely consistent series by turning his fifth successive half-century into his only hundred, the second of his ODI career.
But no other England batsman reached even 30, and they lasted just 45 overs after losing their last seven wickets for 81.
Hales became only the fifth Englishman to hit five consecutive ODI 50s, and the first to do so in the same series - going on to a 116-ball century which contained 13 fours.
There were occasional false shots, and necessary but hardly outrageous fortune, with movement for all bowlers after De Villiers won the toss.
At the other end, England were largely hapless in collective contribution to their own downfall as Kagiso Rabada, David Wiese and Imran Tahir cashed in three wickets each.
The tone was set in a frenetic first 10 overs, which nonetheless went England’s way as Hales and Joe Root passed 50 together for the fourth time in as many matches.
Jason Roy was pinned lbw on the back foot by a leg-break, after De Villiers surprisingly introduced Tahir for only the fifth over.
But South Africa then immediately returned to seam at both ends, with a plan for Root.
Chris Morris attacked England’s linchpin number three on the back foot, with leg-side catchers in abundance - and when the full ball came, Root edged to slip on 12 only for Amla to put down a straightforward catch.
It was not costly - because Tahir returned and, overturning an initial not-out verdict from Johan Cloete, had his second lbw victim when Root missed a sweep at a straight one.
Morgan tried to kickstart his innings with a big shot, but managed only an outside edge behind on the charge at Wiese - for his third successive single-figure score.
Ben Stokes helped Hales put on 70, as England reached the promise of 155 for three in the 28th over.
But Rabada returned, and changed the match with two big wickets in as many legitimate balls.
Stokes wandered too far across his crease for a leg-side flick, and was bowled; then Jos Buttler took his sequence to one run in three innings, since his heroics in the first two matches.
He watched a wide go by first ball, but fell to his second when Rabada snaked a good one through forward-defensive bat and pad to hit leg-stump again.
A desultory procession followed as Hales’ potential partners failed to deliver.
He retained his composure to reach three-figures with an emphatic on-driven boundary off Morris - but even he eventually succumbed, pulling Rabada to deep square-leg, before Stuart Broad was last out.
Topley put South Africa’s chase in instant trouble, with three new-ball wickets.
Quinton de Kock and Faf du Plessis each fell via an inside-edge, the opener caught-behind after an England review and number three bowled aiming to drive an inswinger.
Rilee Rossouw drove into the hands of cover.
But De Villiers counter-attacked expertly as he and Amla took over.
Amla was undone by Moeen Ali’s drift, stumped when the off-spinner pushed one wide outside off-stump.
By then, though, South Africa were back on track.
With the big-hitting Wiese for company, De Villiers had one escape on 87 thanks to a tight umpire’s call on Adil Rashid’s lbw review before bagging his only century of the series for an early 32nd birthday present in his 200th ODI.