emacs-28.2 -Q -nw --color=no
   s t o n k s M-$ 1

At this point, I expect to see the word "stonks" replaced with
"stocks", but it is instead replaced with "stockstonks".

The problem seems to be in ispell-highlight-spelling-error-generic, a
20th-century kludge from before face support for ttys was added in
emacs-21 in 2001.  It's been unnecessary since then, and it looks like
it's been breaking ispell on colorless ttys since at least emacs-23.

Changing "(display-color-p)" to "t" in ispell-highlight-spelling-error
suffices to fix the bug.