Mario Vrancic and Marco Stiepermann put the Canaries 2-0 up but Bolton rallied through Sammy Ameobi and Mark Beevers' 88th-minute equaliser to level at 2-2.
Ameobi was then sent off before Teemu Pukki struck the winner in stoppage time.
Leeds, managed by Marcelo Bielsa, kept the gap to just one point after coming from behind to beat QPR 2-1.
Nahki Wells opened the scoring for Steve McClaren's men but Kemar Roofe struck either side of half-time -- the second from the penalty spot -- to earn Leeds victory.
Frank Lampard's Derby leapfrogged West Brom into third, after the Baggies' 2-2 draw with Aston Villa on Friday, with a 1-0 win at Wigan courtesy of a Jack Marriott goal.
Middlesbrough lost ground on the leaders after being held 1-1 at home by Blackburn.
Boro were up against it after Muhamed Besic was shown a straight red card in the first half for hauling down Bradley Dack when he was through on goal. Charlie Mulgrew fired Rovers ahead from the resulting free-kick.
But Britt Assombalonga rescued Tony Pulis's side a point with a 62nd-minute equaliser.
Ipswich remain rooted to the foot of the table after losing their fourth game in a row, going down 2-0 at Stoke. The hosts took the lead in first-half stoppage time as Sam Clucas slipped in Tom Ince, who fired past Dean Gerken.
Joe Allen made it two on the hour mark to extend Stoke's unbeaten league run to eight games.
A scintillating first-half display was enough for Swansea to edge past Brentford 3-2 at Griffin Park. Graham Potter's side were 3-0 up inside half an hour thanks to Wayne Routledge, a Chris Mepham own goal and Leroy Fer.
But Brentford fought back through Ollie Watkins and Said Benrahma to make it a tense finish for Swansea.
Sheffield Wednesday and Rotherham drew 2-2 while Millwall and Hull played out an entertaining 2-2 draw at the Den.
Bristol City beat Birmingham 1-0 while Preston edged Nottingham Forest 1-0 at the City Ground.