Donovan Solano lifted a lazy fly ball in the seventh inning that was dropped by Adam Loewen in left field. The two-base error allowed Chris Coghlan and Bryan Petersen to score.
The Marlins had tied the score at 1 in the sixth inning on Kevin Mattison's RBI single.
New York took the early lead on Ike Davis' RBI double in the first inning off Josh Johnson.
The game was halted for 54 minutes in the third due to rain, which shortened the outings for both starters.
Mets knuckleballer R.A. Dickey was perfect in two innings, striking out one while throwing 23 pitches with 16 strikes.
Johnson worked three innings, giving up a run on five hits, and logging 49 pitches (32 strikes).
The game marked the first time Jose Reyes faced his former team. The four-time All-Star shortstop with the Mets, Reyes was the Marlins' marquee free-agent signing, inking a six-year, $106 million contract.
Reyes had just one at-bat, bouncing back to Dickey to open the first inning.
After some early-inning sprinkles, play was halted in the bottom of the third, as Dickey was completing his warmup.
The Mets strung together three straight one-out hits in the first inning and grabbed the early lead.
Justin Turner singled to right, and advanced to third on Jason Bay's single. Davis delivered a ground-rule RBI double to left-center, taking the ball to the opposite field.
In the top of the eighth inning, Mets manager Terry Collins was ejected for disputing a batter's interference call on Jordany Valdespin.
Up next for the Marlins: Mark Buehrle will make his second Grapefruit League start, and third overall outing, when the Marlins face the Cardinals on Friday at 1:05 p.m. ET in Jupiter, Fla., live on Gameday Audio. Buehrle also threw three innings against the University of Miami on March 6. In his first Grapefruit League start, the left-hander gave up two runs on five hits in a win over the Mets. The Marlins plan on having Jose Reyes, Emilio Bonifacio and Hanley Ramirez at the top of the order.