Oscar Gonzalez added a solo homer for Cleveland, which trailed 3-0 before holding the Dodgers to three hits over the final six innings. Will Brennan had three hits and a stolen base for the Guardians.
Sam Hentges (2-2), Trevor Stephan and Emmanuel Clase each pitched a scoreless inning in relief of Noah Syndergaard, who gave up three runs on four hits over six innings.
Will Smith hit a two-run homer for Los Angeles, which lost for just the third time in 20 games this month. Mookie Betts had two hits with a walk, two runs and two stolen bases.
Cleveland was down 3-2 before scoring five runs on four hits in the seventh. Dodgers starter Bobby Miller (7-3) was relieved by Caleb Ferguson after allowing two of the inning's first three batters to reach base.
Steven Kwan tied the game with a two-out, run-scoring single, and Jose Ramirez put the Guardians ahead with an RBI single to right field. Calhoun followed with his three-run shot for his second homer in as many games.
Miller allowed four runs on six hits over 6 1/3 innings. He walked one and struck out five while throwing 97 pitches.
Cleveland added an insurance run in the eighth inning against Bryan Hudson on Myles Straw's RBI single.
Betts singled against Syndergaard to begin the game, stole second base and scored on Smith's one-out homer to left field. The 400-foot blast was Smith's 16th homer this season.
Los Angeles tacked on a run in the third inning when Freddie Freeman's single scored Betts, who drew a one-out walk and stole second base. Betts is 18-for-36 (.500) during his 10-game hitting streak.
Cleveland's comeback began with two runs in the fourth inning. Gonzalez hit a solo homer with two outs and Gabriel Arias singled in a run.
—Field Level Media