Ben Youngs crossed twice as England put themselves in sight of an unlikely victory after trailing 28-10 to the dominant Springboks, but JP Pietersen ended the comeback at Ellis Park.
England ultimately paid the price for a poor start as Willem Alberts, Bismarck du Plessis and Francois Hougaard claimed early tries for the physically imposing hosts.
The tourists' other points came from Toby Flood, who impressed on his recall with a first-half try and five successful goal kicks.
The defeat was England's ninth in succession to South Africa but, by preventing the landslide that looked possible early on, they can keep their heads high.
It was always likely to be a tall order given the altitude of the Highveld and because the limited preparation evident in South Africa's performance last week was no longer a factor.
But even though there was an element of controversy over both of South Africa's first two tries in the opening eight minutes, England's start was still a dismal and ultimately costly one.
They saw little of the ball in the opening three minutes while South Africa looked incisive, constantly crossing the gainline.
Alberts made one good break before Bryan Habana found space on the left. Ben Morgan thwarted the winger but England made a costly error at the resulting scrum as the ball was allowed to run clean through the channel.
Alberts saw the loose ball roll out and even though there was debate over whether he could pick it up, the flanker gleefully gathered and darted over.
England's problems increased just moments later as South Africa powered forward again and hooker Du Plessis barged his way through to spin and touch down.
It was a close call as to whether he planted the ball over the line but a try was awarded after video adjudication and converted by Morne Steyn.
England finally registered with a Flood penalty but it came from a rare foray into the Springbok half and the hosts replied in kind.
Morne Steyn added a penalty before Hougaard broke the line with some neat footwork to score a third. Steyn pushed the score out to 22-3.
England made the most of another rare opening to claim their first try midway through the first half.
Youngs took a quick tap penalty and released Chris Ashton, who sent Flood clear.
Flood converted his own try but it did not look like the start of a comeback as the Springboks again pushed them back and Morne Steyn added a long-range drop goal.
It could have got even worse for England as Pietersen failed to take a pass from Jean de Villiers with the try line at his mercy.
Frans Steyn was allowed the chance to line up a penalty from inside his own half in the final minute of the half but his effort slipped narrowly wide.
South Africa looked to apply more pressure as they declined a kickable penalty early in the second half and looked for touch.
Powerful charges from Alberts and Eben Etzebeth looked certain to yield another try but England somehow held out.
They did not escape without damage as captain Chris Robshaw was penalised and Morne Steyn added another three points but England refused to lie down.
They not only earned some respite but benefited from a huge slice of luck in the 52nd minute as an overthrown Springbok lineout found its way into Youngs' hands.
The scrum-half broke for the line and, despite being caught high by an Alberts tackle, managed to get the ball down for a try awarded after lengthy deliberation.
Flood's conversion brought the score to a more respectable 28-17 but Morne Steyn then helped himself to another penalty goal.
England then, almost inconceivably, suddenly got themselves back within a converted try just after the hour.
The hosts switched off at the breakdown after a drive by substitute Alex Corbisiero and Youngs pinched the ball to dive through a gap for his second try.
Flood added the extras and chipped further away at the lead with another penalty from just inside the Springboks' half.
England started to look like they believed they could win but South Africa found another gear when they needed it.
After a useful spell of possession, they neatly worked the ball along the line and Pietersen flamboyantly dived over for the decisive try seven minutes from time.