The victory earned Miami a series split of the four-game set and its 10th win against New York, clinching the season series.
Four of those wins have come in games started by Harvey. The Mets' ace has a 3.52 ERA in 23 innings against the Marlins compared to a 1.97 ERA in 127 2/3 innings against other teams.
"For whatever reason, we really lock it in against him," Miami manager Mike Redmond said. "We've just been able to kind of rise to the occasion and grind out a ton of at-bats and make him throw a lot of pitches."
Following Morrison's RBI single, Donovan Solano wore down Harvey with a nine-pitch at-bat that culminated with a two-run single. Solano fouled off six pitches before hitting a 2-2 slider to right field.
Solano's at-bat ran Harvey's pitch count up to 31 in the sixth and 110 for the game.
"He was a little bit tired, but that's part of the game," Solano said.
"I couldn't make the pitch to get him out," Harvey said. "When I went in, it wasn't in enough or down. And then I threw him a slider and it was up, so he shot it into right field."
The sixth inning saw Harvey unravel after five quality innings. The right-handed ace had stifled Miami until that pivotal frame, giving up only one hit -- a third-inning single by Koehler.
"Those first or five innings, he was really tough and probably the best I've seen him out of his last three or four starts he's pitched against us," Redmond said. "That was probably the best I've seen him."
Harvey surrendered back-to-back singles to Juan Pierre -- pinch-hitting for Koehler -- and Christian Yelich to lead off the sixth. Pierre's single was the veteran's seventh hit in 15 career at-bats against Harvey.
But the early promise almost amounted to nothing after Harvey retired Adeiny Hechavarria on a lineout and fanned Giancarlo Stanton.
But Morrison opened the scoring against the All-Star ace, who failed to get out of the inning and gave way to the bullpen.
Koehler put himself in much more danger than Harvey, but he ended the day with his first career scoreless start. He surrendered five hits, walked five, hit a batter with a pitch and struck out five in six innings, notching his sixth quality start.
Koehler put multiple runners on base in the first, third, fifth and sixth innings, but he got out of trouble each time. The Mets were just 1-for-9 against Koehler with men on base.
"From the first inning on, none of those zeros came easily," Koehler said. "It was a battle right off the start. The defense played great behind me and made some really big plays."
As Koehler said, he did not escape the trouble alone.
Jake Marisnick made a diving run-saving catch on a Marlon Byrd liner to center with runners on first and second in the fifth. He got up quickly and fired a throw to cutoff man Solano, who doubled up David Wright at first to end the inning.
"The way Koehler kind of went about his business [Thursday], kind of attacking the zone and everything, he keeps the defense in it," Marisnick said. "He keeps us light on our feet. I was able to get a good jump on it, and I saw it all the way into the glove."
Said Koehler: "The play Jake made in center field's a game-changer. [If] that ball falls and it gets by him, we're talking two runs there and a guy in scoring position. That play right there really changed the game."
Miami turned another key double play in the sixth.
After Koehler led off the inning by issuing his fourth walk of the day, former Marlins catcher John Buck grounded into a double play.
The double play hindered what could have been a game-changing inning for New York. Juan Lagares singled and Omar Quintanilla walked to give the Mets a runner in scoring position for the fifth time in the first six innings. But Koehler escaped trouble again by striking out Harvey.
But the sixth was not Koehler's first bout of two-out trouble.
After beginning the third by fanning Harvey and inducing an Eric Young groundout to second, Koehler gave up a single to Justin Turner, walked Wright and hit Byrd with a pitch to load the bases.
But Ike Davis, who stranded five runners, popped out to third baseman Ed Lucas in foul territory down the left-field line to squander the early scoring chance.
"The key was just trying to throw as many strikes as possible, because I would get ahead of some guys, then fall behind," Koehler said. "I was basically just trying to keep the ball down and let them hit it to the ground, because those guys behind me play defense. There's not many guys better in the infield, so you've got to really let them work, especially with guys on base."
Miami's bullpen finished the game with much less drama. A.J. Ramos gave the Marlins scoreless innings in the seventh and the eighth, and closer Steve Cishek pitched the ninth for his 18th consecutive save and 23rd overall.
After beginning both April and May with three-game losing streaks, Miami has won the first games of June, July and August.
"These guys have battled," Redmond said. "They come and play every single day. Those first two months were rough, but we've moved on and we're playing some good baseball."