Não é que eles estejam fora do escopo , ksh (pelo menos a versão AT & T) não tem essa limitação de bash . É que read é chamado duas vezes.
A segunda vez é aquela em que ela falha e tira você do loop.
Como esse segundo read não lê nada, define a, b e c para a string vazia.
Basta fazer:
echo this that and more | IFS=" " read a b c
echo "a=$a b=$b c=$c"