Jason Heyward went 4-for-5 with an RBI and two runs scored, marking his first four-hit game since his 2010 rookie season.
With the game tied in the seventh inning, Atlanta responded against Miami's bullpen for four runs and tacked on another in the eighth to put the game firmly out of reach.
"That seventh inning, we just couldn't stop them," said Miami manager Mike Redmond. "We didn't execute some pitches, and they've got a lot of weapons over there. As you can see, they have the ability to do some damage with the middle of their order. We just couldn't stop them. We couldn't get them out."
The Marlins had snapped their six-game losing streak with a 1-0 win on Saturday, which also put a halt to the Braves' 14-game winning string.
"As an offense, when you get shut out, you want to come back and get things going again -- and we were able to do that today," Freeman said.
Miami starter Henderson Alvarez was effective on a day he allowed four runs over six innings, with the big blast being the three-run homer allowed to Freeman in the fifth inning. Alvarez also added a two-run double for Miami, which led at one point by three runs. Marlins rookie Christian Yelich had his 10-game hitting streak snapped.
Atlanta's Mike Minor, who gave up four runs over seven innings, improved his record to 12-5.
On Sunday, the Marlins were reminded once again how critical it is to execute in the late innings of close games against good teams.
The Braves used a four-run seventh inning to snap a 4-4 tie. Getting the inning going was a leadoff walk issued by reliever Dan Jennings to pinch-hitter Joey Terdoslavich. Heyward's single moved Terdoslavich to third, and Heyward took second on the throw.
A.J. Ramos replaced Jennings, and the Braves took the lead on B.J. Upton's sacrifice fly to left. Freeman was walked intentionally, before Gattis drove an RBI double to center. Atlanta broke things open further on Johnson's two-run double.
"I think it's just the execution," Redmond said. "We started that inning off with a walk to a pinch-hitter, a guy coming off the bench. Obviously, that can't happen. That kind of starts it. When you're on the road against a good team, a team that can swing the bat, you've got to make them earn the bases. You can't just give them a freebie. That really started it all off."
All afternoon, fly balls to right field were difficult for the outfielders. On Johnson's hit, Giancarlo Stanton never got a read on a ball that should have been caught. Due to the elements, a two-run hit was awarded to Johnson, the National League's leading hitter.
"It was bad today," Stanton said.
On Johnson's ball, he never picked it up cleanly, and the right fielder ran to a specific spot, but the ball carried over his head.
"[The ball] got in [the sun]," said Stanton. "By the time it popped out, it was behind me. Also, I didn't think he hit it as well as he did. The sound of the bat, the swing, it didn't look like it was going to go to the track."
The Marlins are now 1-5 on their road trip, and Sunday was similar to their three losses at Pittsburgh. In all three of those games, Miami saw multi-run leads disappear.
"They take advantage of mistakes," said Ramos. "That's one thing I have to get better on, especially -- executing a pitch to where it needs to get to, or else they will make you pay."
Alvarez, who had his string of five straight quality starts snapped, also saw another string come to a halt.
The 23-year-old entered Sunday not having allowed a home run in each of his 45 innings pitched this season. That streak reached 49 innings before Freeman's three-run blast with one out in the fifth gave Atlanta a 4-3 advantage.
Freeman connected on a 3-1 pitch, and it came after a short break due to Justin Upton exiting the game with a left hamstring cramp. With two on and no outs in the inning, Upton dropped a bunt that catcher Koyie Hill gathered and made a nice play on by throwing out Minor on a force play at at third base.
But while sprinting down the first-base line, Upton experienced discomfort. He tried loosening up his left leg, as Alvarez and the rest of the players stood around. A few minutes later, B.J. Upton pinch-ran for his brother.
Freeman's homer gave Atlanta 4-3 lead that was short lived, as the Marlins tied it in the sixth inning on Ed Lucas' sacrifice fly to center, which scored Stanton, who walked to open the inning.
"The game got away on that pitch," Alvarez said in Spanish of Freeman's homer. "I wanted to throw a fastball in, and it stayed middle-middle. He got his hands out and hit the ball well."