Kansas City came into the eighth trailing 4-3, but Jarrod Dyson and Alex Gordon led off the frame by drawing walks from Boston starter Daniel Bard (2-4). Matt Albers came in to pitch and Butler greeted him by belting a 1-1 pitch far over the left-center field fence and into the fountain at Kauffman Stadium for the go-ahead runs.
The long homer made a winner of Jose Mijares (2-1), who hurled two scoreless innings.
Jonathan Broxton picked up his sixth save as the Royals evened their three-game series with the Red Sox.
Bard surrendered five runs on six hits over seven innings for Boston.
Dustin Pedroia drove in a pair of runs.