England looked set to defend a modest total as Reece Topley started the last over, with South Africa needing 15 runs to win.
Kyle Abbott stole a single to get Morris on strike. The tall Morris struck the next two balls for four and six. After a dot delivery, he hit twos off the last two balls. Topley had a chance to run out Abbott to force a tie and a super over but fumbled a throw from long-off.
The man of the match, though, was leg-spinner Imran Tahir, who took four for 21 to restrict England to 134 for eight after the tourists were sent in to bat.
England looked set for a big total as opening batsmen Jason Roy and the in-form Alex Hales hit 38 off the first 3.3 overs before Roy clipped Kagiso Rabada to Hashim Amla at mid-wicket.
Tahir came on to bowl after the six-over power play had yielded 50 runs for Roy's wicket. He struck with his fourth ball when Hales top-edged a sweep to backward square leg. JP Duminy held the catch despite being knocked to the ground by Rabada, who was also running for the ball.
South Africa made a confident start, with Hashim Amla and AB de Villiers putting on 31 for the first wicket. But England bowled well on a slow pitch and no batsman was able to dominate.
All-rounder Ben Stokes and leg-spinner Adil Rashid were impressive in the middle overs, taking one for 19 and one for 24 respectively.
It seemed to be England's match when Chris Jordan dismissed David Miller and David Wiese in the penultimate over.
