Marius Buelter gave the hosts a shock lead in the 22nd minute, but their joy was short-lived with Dortmund forward Paco Alcacer stabbing in an equaliser three minutes later.
Instead of turning the game around, however, as they had done in both their previous league games when they fell a goal behind, Dortmund conceded again.
Buelter slotted in on the rebound after keeper Roman Buerki had done well to stop a shot. Sebastian Andersson then completed a fine passing move in the 75th to score their third.
The Ruhr valley club’s first loss of the season leaves them on six points in fifth place, three behind leaders RB Leipzig, who are on nine after their 3-1 win over Borussia Moenchengladbach. Union are on four points.
Champions Bayern Munich demolished Mainz 05 6-1 to climb into second place on seven points.