The Royals faced an early three-run deficit, but took the lead in the fifth and then added a four-run eighth that broke the game open.
Butler had a two-run single in the fifth and he had another run-scoring base hit in the eighth. Alex Gordon also drove in a run in both of the big innings in helping the Royals win for the fourth time in five games.
Salvador Perez chipped in a solo homer in the fourth and an RBI single in the eighth.
Luke Hochevar (8-13) gave up five runs on six hits with four walks in five innings and still claimed the win. He had gone 0-4 in his seven previous starts and won for the first time since July 31.
P.J. Walters (2-4) absorbed the loss after allowing six runs on seven hits in four-plus innings.