Bedoya took a pass from Ilsinho and outworked three Dallas defenders to the left of goalkeeper Jimmy Maurer before moving the ball to his left foot and unleashing the deciding kick.
The win was the third straight for the Union (3-2-1, 10 points) who dominated the stats, outshooting Dallas 18-3, placing eight shots on target to just one for FCD, and maintaining 56.3 percent of the ball possession.
Mauer had six saves to keep FC Dallas (3-2-1, 10 points) in the match.
Reto Ziegler put Dallas on the board in the 10th minute on a direct free kick from just outside the box after a foul on Ryan Hollingshead by the Union's Marco Fabian.
Dallas striker Michael Barrios approached the ball first but stepped over it, leaving the kick for Ziegler, who used his left foot to curve the ball into the upper-left portion of the net so precisely that Union goalkeeper Andre Blake never even moved.
Blake did not have to record a save in the victory.
Dallas was within five minutes of regulation time from earning its third straight win before Philadelphia roared back.
The Union tied the match in the 85th minute in wild fashion. Jamiro Monteiro blasted a shot that Mauer deflected straight up in the air so high that defender Matt Hedges had to manhandle Cory Burke to keep him from getting his head on the ball once in came down. Hedges was whistled for a foul, and the Union were awarded a penalty kick.
Fabian took the kick from the spot, but Mauer guessed right, leaping to his right to block the try. However, the rebound rolled right back into play, and Burke beat the FC Dallas defense to the loose ball and easily kicked it into the net to square the match.
Bedoya completes late Union comeback
The Philadelphia Union extended their win streak to three games thanks to Alejandro Bedoya's stoppage-time winner over FC Dallas.
Stunning Ziegler free kick puts Dallas ahead
Major League Soccer: Reto Ziegler (10') Philadelphia Union 0-1 FC Dallas