Before the start of day three, Surrey lost the services of England paceman Gus Atkinson who was predictably withdrawn to prepare for a Test recall against New Zealand, with Tom Lawes coming in.
Resuming on 82-2, night-watchman Rahul Chahar set about the leg-spin of Mason Crane with a couple of sixes.
He had more than done his job in a stand of 76 with Burns by the time he was caught behind off Ben Kellaway for 36.
Dan Lawrence, who had been in superlative form averaging 78 in seven previous games, was bowled without scoring by a peach from Ryan Hadley.
With Ollie Pope starting strongly, Burns looked largely untroubled as he reached his highest score of the season, but almost chipped Kiran Carlson to cover on 82.
He took a pair of fours off Crane to reach a gritty century off 220 balls with 13 fours and a six, while Pope reached his 50 off the final delivery with the old ball when Surrey were 231-4.
Burns eventually fell with the scores level, caught behind down the leg-side off Tom Norton, while Sam Curran took a single first ball to avoid a pair but went no further as he edged Timm van der Gugten to Chris Cooke.
Pope was batting faultlessly as Glamorgan’s bowlers toiled in the heat, until he drove at Crane and mis-hit to mid-on to put Surrey back in trouble.
Further stoic resistance followed in the evening sun from Ryan Patel (40) and Adam Thomas (30) before both fell to Hadley.
Surrey’s last-wicket pair of Jordan Clark and sub Lawes, both used to batting further up the order but relegated by a duo of nightwatchmen, put bat firmly to ball in an unbeaten stand of 56 against some tiring bowlers.
As dozens of pigeons and gulls besieged the outfield, Glamorgan’s frustration grew as the partnership kept alive Surrey’s hopes of setting a competitive target, with Lawes on 31 overnight and Clark not out 22.