Fiers (4-1) fanned seven. He allowed Starling Marte's two-run shot in the second before retiring 16 of the next 17 batters.
Closer Francisco Rodriguez gave up a homer to Andrew McCutchen with one in the ninth. Rodriguez put the tying run aboard with two outs with a walk before striking out Pedro Alvarez for his 39th save.
Milwaukee knocked around Vance Worley (5-4) for four runs over the first two innings, with each hit coming with two outs. Pittsburgh had its three-game winning streak snapped and dropped to five back in the NL Central.
Jonathan Lucroy hit his National League-leading 43rd double for the Brewers, who snapped a three-game losing streak to increase their lead in the Central to 1 1/2 games over second-place St. Louis.
Lucroy singled home a run in the second after Carlos Gomez reached on a two-out double to left-center that glanced off McCutchen's glove. Aramis Ramirez followed two batters later with his second single of the day to drive home Lucroy for a 4-2 lead.
The Pirates had tied it at 2 in the top of the second after Marte homered on to the concourse above left-center. But Fiers allowed just Russell Martin's single in the fourth from there, getting out of that inning with a pretty over-the-shoulder catch with two outs by shortstop Elian Herrera in shallow center to save a potential hit.
Fiers' fastball tops only at about 90 mph. But he has succeeded since stepping into the rotation for the injured Matt Garza by mixing pitches and keeping the ball down in the zone.
Fiers cooled off a Pirates offense that had at least 11 hits in its two previous games.
Worley settled down after the first two innings, retiring 13 of 15 until leaving with one out in the seventh after allowing back-to-back singles. The right-hander allowed a season-high 12 hits, eight coming in the rough first two innings.
PIRATES: INF Clint Barmes could rejoin the team during a three-game series against St. Louis, which starts Monday in Pittsburgh. Barmes has been on the disabled list since July 6 with strained left groin.
BREWERS: Garza, who was supposed to throw a light bullpen session Sunday, is recovering from a strained rib cage muscle. Manager Ron Roenicke said Garza will throw again Tuesday if Sunday's bullpen outing went well. Garza went on the disabled list Aug. 5.
PIRATES: LHP Francisco Liriano (3-10) will try to rebound from a tough outing when he opens the Cardinals series. He gave up nine runs in four-plus innings in an 11-3 loss last week to Atlanta.
BREWERS: RHP Kyle Lohse (11-7) returns to the rotation to open a three-game series in San Diego. Lohse hasn't started since Aug. 13 because of a right ankle injury.