The game moved on fast in the morning session, with England losing five wickets but still scoring at a good rate thanks to Root who zipped along at close to a run a ball having resumed on 168.
England scored 42 runs in the first half-hour as Root shared 68 with Jos Buttler, who reverse-swept well.
But the game changed when Sri Lanka remonstrated with the umpires about the state of the ball, and managed to force a change. First ball, Avishka Fernando got some nip away from Buttler, who was caught behind, then Sam Curran was bowled for a golden duck by one that nipped back into him.
Dom Bess survived the hat-trick ball, but was run out in the following over, sacrificing himself as confusion reigned over an lbw appeal against Root.
By then, Root had reached his fourth Test double-century (only Wally Hammond and Alastair Cook have more for England), appropriately bringing up the milestone off his 291st ball with a powerful sweep, the innings’s trademark shot.
Jack Leach and Mark Wood did not last long, falling to Dilruwan Perera, before Stuart Broad joined Root for an entertaining last wicket stand of 15. Broad was twice given out off Perera but saved by DRS, then pulled a handsome six.
Root was last man out for 228, his second-highest Test score, caught trying to slog to cow corner. It had been a masterful, dominant innings; only three other Englishmen reached 12.
Root had passed 8,000 Test runs when he reached 177. At 30 years and 17 days, Root became the third youngest batsman to reach that milestone, after Alastair Cook and Sachin Tendulkar. He is the seventh Englishman to make 8,000, and only Kevin Pietersen (176) has made it there in fewer innings than Root’s 178.