The Union won for the fourth time in five games.
Tajon Buchanan scored the lone goal for the Revolution.
New England played with 10 men for the final 39 minutes.
After a relatively sluggish start by both clubs, the Union had a solid scoring opportunity in the 21st minute when Alejandro Bedoya wriggled free for a shot from about 20 yards out. Goalkeeper Matt Turner was in good position to make the save in the air.
In the 30th minute, Philadelphia's Jakob Glesnes headed a pass from Ray Gaddis just wide of the net.
The Revolution nearly scored in the 41st minute when Kelyn Rowe received a pass deep in the box and had his shot trickle just wide of the net.
Other than Rowe's shot, the Revolution weren't able to generate much offense and managed no corner kicks in the first half. The Revs put just two shots on goal for the game.
Brenden Aaronson took a right-footed shot from the top of the box in the 51st minute but didn't get too much power as Turner stopped it easily.
New England was reduced to 10 men when Matt Polster received a second yellow card in the 56th minute and was sent off.
The Union took advantage of being a man up and second-half substitute Fontana corralled a loose ball in front and chipped it over Turner for a 1-0 lead in the 73rd minute.
In the 81st minute, the Revolution equalized at 1 when Buchanan scored his first career goal after dribbling through a pair of Union defenders.
Five minutes of stoppage time was added and New England was awarded a free kick from about 40 yards out in the 93rd minute. But Gustavo Bou shot the ball way over the net.
Two minutes later, Fontana fired the game winner with a strike from about 20 yards out.