And on the contrary, (string-match "\\s-" "\n") => nil
That seems backwards to me.
Almost certainly in your environment,
(char-syntax ?\n) => ?>
and the \s stuff is defined in (lispref)Syntax of Regexps to be in terms of syntax codes.
(but of course you probably know that).
I've shifted my advice and coding in recent years to avoid syntax classes as much as possible, which probably
isn't ideal, but it seems easier and less error-prone to use raw character classes.