The British number one held his nerve at key moments to edge out his South Korean opponent 7-5 7-5 in one hour and 49 minutes and now faces big-serving American John Isner.
Norrie, beaten by Australia’s Alex De Minaur in the quarter-finals at the recent Barcelona Open, quickly fell 3-0 down in the first set against Kwon after losing his opening service game.
The Briton then fought back from 1-4 down, breaking Kwon in the seventh game before levelling at 4-4 and saving two more break points on his serve to make it 5-5.
World number 11 Norrie, making his debut on the clay in Madrid, seized control in the next game by breaking Kwon to love and served out to take the first set in just under an hour.
But 24-year-old Kwon, the world number 73, refused to roll over in the second set.
Both players swapped breaks of serve from 3-3 and after Norrie had broken Kwon for a fourth time in the match to edge 6-5 ahead, he made no mistake on his own serve, sealing a hard-fought victory on his third match point.