New Zealand held a 12-0 lead at the break but the South Africans erased the deficit early in the second half with tries by Seabelo Senatla and Cecil Afrika that were converted by Branco du Preez.
A penalty by Du Preez and a try by Cornal Hendricks completed the scoring for South Africa.
Gillies Kaka, Tim Mikkelson and Ben Lam scored tries for series leader New Zealand, which holds a 32-point lead over South Africa in the standings with two rounds remaining.
It was South Africa's second win of the series following a 40-21 win over New Zealand in the final of the Las Vegas Sevens in February.
"It's is not every day you beat New Zealand twice in the final," South Africa head coach Paul Treu said. "Every win you have to take, and we can go back to South Africa as a happy team."
South Africa beat France 14-12 in the semifinals and New Zealand advanced with a 35-17 win over Australia.
Last year's Tokyo Sevens winner Australia finished third, crushing France 31-7.
The next round is on May 4-5 in Glasgow, Scotland. – Sapa-AP