Vancouver was down a man early thanks to Davidson's red, but it took almost the entire game for Philly to find a way through.
The Whitecaps found themselves reduced to 10 men early on. Jun Marques Davidson was red-carded after a headbutt on the Union's Keon Daniel following a bit of physical play between the two.
The Whitecaps held out for most of the game, and indeed nearly went ahead when Kekuta Manneh's shot beat Zac MacMath but rebounded off the post.
But the Union eventually made the advantage pay late. Antoine Hoppenot played a quick give-and-go with Aaron Wheeler, and the big man's backheel on the edge of the box teed up Hoppenot, who took a dribble and put a shot past Brad Knighton in the 85th minute.
The win sees Philadelphia fourth in the East, just two points behind leader Sporting Kansas City at the crowded conference peak. Vancouver now sits fifth in the West, ahead of Dallas and in the playoffs only by virtue of goals scored.