Dortmund took the lead in the 43rd minute through Donyell Malen, who pounced on some poor defending from United to fire home from close range.
But United equalized just two minutes later through Diogo Dalot, who curled home a beautiful strike from outside the box.
The match was turned on its head in the second half, as Dortmund scored two goals in the space of 18 seconds.
First, Malen scored his second of the night, this time from the penalty spot after being brought down by Eric Bailly.
And then, just seconds later, Youssoufa Moukoko slotted home to give Dortmund a 3-1 lead.
United pulled one back late on through Jadon Sancho, but it was too little, too late.
The win was a morale-boosting victory for Dortmund, who have now won three of their four pre-season friendlies.
United, on the other hand, will be disappointed with their performance, as they have now lost two of their four pre-season friendlies.