Having lost 4-2 at Borussia-Park a few weeks ago in the Bundesliga, Edin Terzic's side responded to prevail in this quarter-final tie with Jadon Sancho's strike the difference.
Sancho opened the scoring on the hour mark - his fourth goal of the competition this season - with the Black & Yellows having to play the five minutes of stoppage time without the red-carded Mo Dahoud.
BVB were still without Manuel Akanji, Marcel Schmelzer and Axel Witsel, but Thomas Delaney returned to the starting line up after recovering from an infection and replaced Gio Reyna, who dropped to the bench.
It was certainly an eventful start at Gladbach: Marcus Thuram failed to connect with Jonas Hofmann's cross into the six yard box before Raphael Guerreiro went down injured and had to be replaced by Nico Schulz inside the first five minutes.
Chances were at an overall premium in the first half as high pressing from each side disrupted the other's build-up play. Marco Reus fired over nine minutes in, but the visitors' second effort nine minutes before the break almost brought about the opening goal.
Gladbach, meanwhile, had efforts themselves with Thuram picked out by Lars Stindl just outside the box before testing Marwin Hitz with a low shot, and Marco Rose's side even had the ball in the back of the Dortmund net but Thuram was offside when Alassane Plea played the ball and the half time whistle sounded with the game goalless.
BVB had a goal chalked off themselves in the 52nd minute. Sancho started the move on the left but and picked out Reus' run. But in his haste to meet the German's cross, Haaland was deemed to have fouled Ramy Bensebaini - with referee Stegemann retrospectively reviewing the incident on the pitch monitor before opting to disallow the goal.
At the other end, Hitz was at his best to deny Bensebaini from outside the area before Dortmund struck.
In the 66th minute, Reus intercepted a pass from Florian Neuhaus and BVB countered at pace. The German picked out Sancho on the left hand side, and the talented England youngster sprinted through and fired past Tobias Sippel.
Dortmund had appeals for a penalty waved away when Delaney was clattered by goalkeeper Sippel following a corner, before Haaland beat Elvedi but had his effort beaten away by the diving Gladbach stopper.
Dahoud sees red
With five minutes of stoppage time underway, Bensebaini and Dahoud were both booked for a challenge - and the Dortmund man was sent off as it was his second yellow card.
The Foals pressed forwards in search of an equaliser, winning three corners in a row, but BVB held firm to book their place in the last four of the DFB Cup for the 15th time in their history.