The Royals were scuffling offensively coming in, scoring just 17 runs during a 1-7 slump that dropped them two games below .500.
Moustakas highlighted a resurgent 14-hit attack that featured multi-hit efforts from four others, including Raul Ibanez going 2-for-4 with a run scored and an RBI.
“This one was an important one. It broke our little slump we were in,” Moustakas said.
Bruce Chen (2-2) went the minimum five innings to earn the win, while three relievers behind him held Chicago scoreless over the final four frames.
Scott Carroll (4-6) matched Chen through five innings but imploded in the sixth. He was charged with five runs on 11 hits and a pair of walks.
“I just didn’t feel like I had my best stuff,” Carroll said.
Both teams squandered plenty of chances in the first five innings, with Kansas City’s only run coming on Moustakas’ leadoff blast in the second, and Chicago getting on the board on Adam Dunn’s opposite-field shot in the fourth.
The Royals finally cashed in big when they batted around in the sixth. Billy Butler led off the rally with a double and scored on Ibanez’s two-bagger. A single and a walk loaded the bases, and Carroll was pulled with no outs after a passed ball allowed Ibanez to score.
Javy Guerra entered from the bullpen and committed an error right out of the gate on a bunt hit by Jarrod Dyson. Alcides Escobar scored on the play, and Omar Infante tacked on a sacrifice fly to give the Royals a 5-1 cushion.
With a runner on in the eighth, Moustakas turned on a Eric Surkamp offering and lined it into the right-field seats for his 12th home run of the year.
Kelvin Herrera threw two scoreless frames behind Chen, who scattered five hits and two walks, while Wade Davis and Greg Holland each tossed an inning of relief to close out the win.