Sua segunda atribuição TEST="SHELL_TEST"
não desexporta a variável. Ainda é marcado como "ser herdado por crianças". E o valor herdado pelo filho é o valor atualmente definido no pai.
Em outras palavras, sua segunda atribuição não reverte o status de TEST
para uma variável shell, mas ainda é uma variável de ambiente de acordo com essa terminologia.
Você teria que desexcitá-lo para que ele se torne não definido nos processos filhos:
$ typeset +x TEST
$ sh -c 'echo $TEST'
$