Victory lifted the Foals to fourth in the Bundesliga table after a wretched run of results saw their title charge stall.
Two goals by Dortmund striker Erling Braut Haaland were bookended by Elvedi netting from set-pieces in an action-packed opening 32 minutes.
Algeria left-back Ramy Bensebaini restored Gladbach's lead early in the second half before substitute Marcus Thuram – returning from a long suspension for spitting at an opponent last month – headed the hosts' fourth and final goal.
After home wins over league leader Bayern Munich and second-placed RB Leipzig already this season, Gladbach claimed another big-name Bundesliga scalp.
It was also a significant win for coach Marco Rose, who is being tipped to replace caretaker boss Edin Terzic at Dortmund next season by the German media.
After 12 straight defeats to Dortmund, Gladbach earned its first win over the Black-and-Yellows since April 2016.
Since its impressive 3-1 win at RB Leipzig at the start January, Dortmund has dropped to fifth after failing to win its past three games.
In the other direction, Gladbach is up to fourth after taking 13 points from a possible 15 in 2021.
It is eight points behind leader Bayern, which plays bottom side Schalke on Monday (AEDT).
Breel Embolo came on for Gladbach in the second-half despite police claims that he attended a party in Essen last weekend that broke Germany's lockdown rules.
The Swiss striker has denied the accusation.
Dortmund made a lethargic start at Borussia Park and a Gladbach goal inside the opening 60 seconds was ruled out after a lengthy VAR (video assistant referee) review.
However, the hosts took the lead with 11 minutes gone when Lars Stindl's curling free-kick dropped in behind the defence to be headed home by Elvedi.
Dortmund roared back with two goals inside six minutes, both created by Sancho for Haaland, who fired home his first from a tight angle on 22 minutes.
After Jude Bellingham won the ball back for Dortmund, great footwork by Sancho then again unpicked Gladbach's defence for Haaland to blast his side 2-1 ahead on 28 minutes.
But another Stindl free-kick on 32 minutes could only be parried by Roman Burki and Elvedi tapped home the rebound from close range to make it 2-2 at the break.
Gladbach regained the lead five minutes into the second-half when Bensebaini swung in a shot which curled outside Burki's grasp.
Dortmund conceded a third goal of the night from a set-piece when Thuram headed home a Florian Neuhaus corner 11 minutes from the whistle.