Roy (120) marked his one-day international return to this venue, where he was dropped from England’s Champions Trophy semi-final team almost exactly a year ago, with his fifth century in his 60th match.
Buttler (91no) then launched an onslaught which marginally ran out of steam - but was enough to pile up 342-8 and prevail by 38 runs for a 2-0 series lead as Yorkshire’s Liam Plunkett picked up 4-53 and the tourists fell short of a national-record chase despite Marsh’s wonderful 131 from 116 balls.
Jonny Bairstow got England off to a flying start after the jolt of losing captain Eoin Morgan to a last-minute back spasm which left Buttler in charge instead.
Bairstow hit eight fours and a six from just 24 balls before the Yorkshireman aimed one cut too many at Kane Richardson and edged behind eight short of his half-century - ending the first of five successive stands of 50 or more.
Roy and Alex Hales had added exactly 50 for the second wicket when England’s No 3 was bowled through the gate by Jhye Richardson.
Yorkshire’s Joe Root fell to a very good catch by D’Arcy Short, diving forward at deep square-leg, from a pick-up pull from down the wicket to Marcus Stoinis.
Between the breaks for rain as clouds continued their advance from the west, Roy barely put a foot wrong - reaching 50 off 52 balls and three-figures from another 40 in an innings which contained 12 fours and two sixes.
After his first century since his national-record 180 against these opponents in Melbourne six months ago, he had a new all-time high in his sights.
But he was caught-behind off an inside-edge on an Andrew Tye variation, brilliantly gathered by a diving Tim Paine in his left glove - just three balls after the Australia captain had bagged a bloodied lip from one which took an awkward bounce into his face.
If Australia dared to breathe a sigh of relief at that point, it did not last long thanks to Buttler - who hit two successive trademark ramp-shot sixes off the pace of Jhye Richardson to kickstart a predictably manic last 10 overs with one which cost 20 in all.
They brought a further four wickets and 89 runs - slightly under par. Still, the strong impression was that Roy and Buttler had put the contest beyond the tourists on a pitch with decent pace but occasionally variable bounce.
Marsh had other ideas, but lacked support from the rest of the top order. Travis Head fell to a low, diving catch by Hales at midwicket off Mark Wood.
Two drops in the same position were collectors’ items, in that the unlikely culprit was the usually brilliant Bairstow as Marsh survived on five off David Willey and 27 off a Moeen Ali full-toss.
It was not until former Yorkshire all-rounder Glenn Maxwell helped Marsh add 54 for the fifth wicket and then Ashton Agar put on 96 for the sixth that England’s nerves were tested.
Moeen and then Yorkshire’s Adil Rashid held theirs admirably, the latter having Agar stumped with a brave and perfectly-pitched googly.
Marsh could therefore merely limit the margin of a seventh defeat in eight ODIs to England, eventually bowled by Plunkett as he aimed to leg.