Upton repeatedly came up big, including a tying two-run homer in the sixth inning.
The Marlins have now dropped six straight, and 10 of 11.
From an offensive production standpoint, the four runs by Miami snapped a string of nine straight games of not scoring more than three.
"For us, four runs is like 25 runs for some teams," Marlins manager Mike Redmond said. "You've got to try to find a way to win that ballgame. We didn't."
Justin Ruggiano and Giancarlo Stanton each homered for the Marlins, who finished 8-20 in August.
Atlanta has won six straight and heads into September with a commanding 15-game lead in the National League East. At home, the Braves are especially strong, as they improved to 49-18 at Turner Field. The Marlins, meanwhile, fell to 49-85 on the season.
The Braves showcased their overall depth, as Upton enjoyed a big night despite entering the game batting .187. He improved the average to .195.
"Over the course of the season, I think we've done a pretty good job holding him at bay," Redmond said. "Out of that whole lineup, you get down in that lineup and you've got to make those guys [at the bottom] beat you. Tonight, he did."
The Marlins fell to 5-12 in extra innings this season, and they are 18-29 in one-run games.
"It was a hard-fought game," Ruggiano said. "Both teams struggled for hits at the right time. I like the way we fought out there. We played hard all 11. We just didn't get the hits when we needed to."
The Braves set up their walk-off drama with a one-out single by Chris Johnson off Ryan Webb. And with two outs, Paul Janish pinch-ran after Johnson advanced to second on Brian McCann's groundout to second. Dan Uggla walked and Upton ended it with his run-scoring single to right-center, ending the game that lasted three hours and 59 minutes.
"I'm just going to stay the course and not trying to do too much," Upton said. "We've got a very good ball club. It's not going to be one guy every night. It just so happened tonight was my night."
Marlins starter Jacob Turner wasn't involved in the decision, giving up three runs (two earned) in 5 2/3 innings. Turner achieved a dubious Marlins record as he committed three errors. The right-hander joins Gary Sheffield as the only player in club history with three errors in a game. Sheffield did so on Sept. 30, 1993.
Miami reclaimed the lead in the seventh inning on Ruggiano's single and Logan Morrison's RBI single to center. The advantage was short-lived, as the Braves pulled even at 4 in the seventh on McCann's RBI single off Mike Dunn. Johnson kept the inning alive with a two-out double. Atlanta loaded the bases, but A.J. Ramos struck out Upton on a full-count fastball.
In the first inning, the Marlins finally capitalized on a two-out walk to Stanton, and opened the scoring on Ruggiano's two-run homer off Atlanta lefty Mike Minor. Before Stanton crossed home plate, the Marlins had a streak of 38 straight walks without that player scoring. The longest walk-scoreless drought in franchise history was 40 in 2003.
The homer was Ruggiano's 16th, and second this season off Minor.
After the Marlins grabbed an early two-run lead, the Braves chipped back with an unearned run in the first. Atlanta cashed in on Turner's error, which allowed leadoff hitter Jordan Schafer to reach. Schafer tapped a grounder to Morrison at first. But covering the bag, Turner dropped Morrison's toss.
Schafter stole second and moved to third on Elliot Johnson's sacrifice bunt. Freddie Freeman's sacrifice fly to left put the Braves on the board.
"That's what happens when you go on a bad little roll like we have now," Ruggiano said. "Mistakes seem to cost you. But you can't dwell on each. You have to turn the page and come back tomorrow and act like we've been winning. We have to get over this little funk that we're in right now, and collectively as a group, work hard and not worry about yesterday."
Ruggiano's two-run homer gave him 42 RBIs, which moved him into the team lead. However, that distinction lasted a couple of innings.
In the fourth inning, Stanton belted an opposite-field homer, making it 3-1. Like Ruggiano, Stanton collected his 42nd RBI.
Turner worked out of trouble in the fifth inning, a frame where he committed two errors on one play. The right-hander bobbled Schafer's sacrifice bunt for an error, and then made a wild flip that went past Morrison at first. Still, the righty got out of the jam.
But in the sixth inning, a leadoff walk to McCann came back to haunt Turner. With one out, Upton blasted a two-run homer that pulled Atlanta even at 3. Turner was lifted after issuing a two-out walk to Minor.
"We threw it all out there," Redmond said. "We just couldn't get it done."