Smith, playing his 100th Test match, was 37 not out and Amla was on 47 after being dropped on 40 by first slip Andrew Strauss off Ravi Bopara. Alviro Petersen went for a duck, lbw to James Anderson with just one on the scoreboard.
The second-wicket partnership between Smith and Amla capped a much-needed improvement by the tourists after a lethargic display on day one, when England were mostly in control.
Morne Morkel finished off the England innings for 385 all out with four for 72, while Dale Steyn and Jacques Kallis claimed two wickets apiece. Alastair Cook added just one run to his overnight score to depart for 115 and Matt Prior added a vital 60 from 90 balls.
It was an impressive comeback by the Proteas after England resumed on 267 for three. The bowling was more accurate and aggressive, although bowling conditions were better with the sun being replaced by cloud cover.
Prior's innings was a vital contribution as England, at one point, looked as if they were going to collapse at 313 for seven as the Proteas squeezed them with some tight, penetrative bowling.
Prior struggled early on but after lunch was more fluent, hitting three fours in six balls in one sequence. Prior reached his fifty by straight driving Vernon Philander for four.
He was eventually Morkel's third victim and was also one of AB de Villiers' five catches, which would please the team having lost the services of veteran wicketkeeper Mark Boucher to a freak eye injury on the first day of the tour.
Cook was the first man to fall in the day when he dragged a full-length ball from Steyn back on to his off stump. Steyn then picked up Ravi Bopara, making his latest comeback, for a duck when he mistimed a hook shot and edged to the keeper.
Ian Bell was bowled for 13 by Kallis after some clever swing and seam bowling that outfoxed the batsman. Stuart Broad (16) and Graeme Swann (15 not out) chipped in down the order.
Despite taking only the one wicket, England would at least have been encouraged by occasional evidence of sharp spin from Swann and uneven bounce.