Schneiderlin put Saints in front after 22 minutes, before Kelvin misjudged a miscued N'Zonzi cross and Diouf lashed in.
Charlie Adam then volleyed Stoke in front with just four minutes of normal time remaining.
Toby Alderweireld stretchered off after falling and clutching his shoulder on the ground.
Saints still sat on their record Premier League points total, and have five more games to set a new record.