England were 357 for seven in their second innings at tea on the fourth day, a lead of 188 runs after conceding a first-innings deficit of 169.
Malan fell shortly before the interval for 61, one of a quickfire trio of wickets for off-spinner Roston Chase.
But Chase's burst may not compensate for the cost of several dropped catches, errors that threaten to deny the West Indies a series-levelling win in this three-match contest after a much-improved batting and bowling display following their innings and 209-run thrashing in the first Test at Edgbaston.
England were 303 for four when, to the first ball after drinks, left-hander Stokes lofted a Chase delivery that spun away from him straight to long-off, where Kraigg Brathwaite took a well-judged catch on the boundary.
Also Read
The all-rounder, who made exactly 100 in England's first innings, fell for a fluent 58 that featured 11 fours.
Fellow left-hander Malan, dropped on 32, had dug in for more than four-and-a-half hours when Chase finally pierced his defences.
Chase had now taken three wickets for six runs in 22 balls, with England 327 for seven.
Malan was able to drop anchor while England captain Joe Root (72) and Stokes, who made exactly 100 in the first innings, scored at a quicker rate.
England resumed on 171 for three, a lead of just two runs, after the West Indies had made 427 in their first innings following hundreds from Shai Hope (147) and Brathwaite (134).
Root, dropped in the gully on 10, was 45 not out and Malan, who had a lucky break on four when the West Indies opted against a review when a challenge would have seen the Middlesex batsman out caught, unbeaten on 21.
=======================
Root, dropped on eight en route to 59 in England's first-innings 258, completed his second fifty this Test in 87 balls after he edged two fours off Kemar Roach between the slips and gully.
His first innings had seen the Yorkshireman equal South Africa star AB de Villiers's record of scoring fifties in 12 Tests in a row.
However, in none of the previous 11 had Root managed to pass fifty in both innings.
Root's controlled clip past mid-on for a four off Shannon Gabriel raised a century partnership with Malan in 162 balls.
But the breakthrough the West Indies so badly needed came when Root, cramped for room trying to cut Gabriel, steered the ball to gully where Shai Hope, succeeding where brother Kyle had failed on Sunday, clung on to a juggled catch.
But another West Indies catch went down when first slip Kieran Powell missed Malan off Holder, although the blame lay with Shane Dowrich after the wicket-keeper came across for the chance but then bailed out.
Disclaimer: No Business Standard Journalist was involved in creation of this content