B.J. Upton drove in the go-ahead run with a sacrifice fly and Chris Johnson hit a two-run double in the four-run seventh inning that broke open a tie game. Jason Heyward had four hits, including a run-scoring single in the eighth.
Evan Gattis had three, including his run-scoring double in the seventh.
Mike Minor (12-5) gave up four runs on six hits and one walk in seven innings, ended a streak of six straight starts with no more than two earned runs allowed.
The Braves took two of three in the series after their 14-game winning streak ended in a 1-0 loss to the Marlins on Saturday night.
Braves outfielder Justin Upton left the game in the fifth inning with cramping in his left hamstring.
The Marlins have lost seven of eight. Right-hander Henderson Alvarez gave up four runs on seven hits and a walk in six innings.
The game was tied at 4 when pinch-hitter Joey Terdoslavich replaced Minor in the seventh. Dan Jennings (1-3) walked Terdoslavich to start the Braves' four-run inning.
Heyward singled and Terdoslavich scored the go-ahead run on a line drive to left field by B.J. Upton off A.J. Ramos. Following Ramos' intentional walk to Freeman, Gattis hit a run-scoring double and Chris Johnson drove in two runs with a double over Giancarlo Stanton in right field. Stanton appeared to lose the ball in the sun.
Justin Upton left the game after running to first base on an unsuccessful sacrifice bunt attempt in the fifth inning. Marlins catcher Koyie Hill threw out Minor at third base as Upton reached on the fielder's choice.
B.J. Upton replaced his brother as a pinch-runner. Freeman followed with his three-run homer that gave Atlanta a 4-3 lead.
Alvarez escaped a bases-loaded jam in the fourth. Freeman led off with a double and moved to third on an infield hit by Gattis. With one out, Dan Uggla walked to load the bases, but the inning ended on Andrelton Simmons' fly ball to shallow right field and Jordan Schafer's groundout.
The Marlins took a 3-0 lead in the second. Ed Lucas doubled and scored on a single by Jake Marisnick. Hill singled before Alvarez lined a two-run double over Justin Upton in left field.