Brandon Finnegan (1-0) picked up his first career win despite allowing Moss' home run.
Alex Gordon homered and drove in two runs for the Royals, who had a season-high 18 hits.
Cleveland manager Terry Francona met with his team for a pep talk following Monday's defeat, but the Indians lost for the eighth time in 11 games. Cleveland (6-13) has the worst record in the American League and the worst home mark (1-6) in the majors.
Trevor Bauer, who missed his scheduled start Saturday because of food poisoning, allowed three runs in six innings, but Cleveland's bullpen gave up eight runs over the final three innings.
Gordon's leadoff homer in the second gave Kansas City the lead. Michael Bourn's two-run single in the bottom of the inning put Cleveland ahead. Omar Infante's single tied the game in the fourth before Gordon's single in the sixth put the Royals ahead.
Kansas City's go-ahead run in the seventh came after Escobar's double tied the game. Moustakas' high chopper was fielded by first baseman Carlos Santana, but pitcher Mark Rzepczynski missed the bag covering first. Escobar kept running and slid home as catcher Brett Hayes failed to hold on to the ball.
Finnegan, who pitched well down the stretch for the Royals last season after being called up from the minors, allowed one run in one inning. Chris Young, Jason Fraser and Yohan Pino all worked a scoreless inning.