Meu palpite é que a instância de bash, na qual você está executando o comando xterm, já resolve a variável $ANSWER
antes de passá-la ao xterm.
Ou escape do símbolo do dólar ou use aspas simples em torno das expressões. Isso parece funcionar no meu caso.
Atualizar - sintaxe:
xterm -e "echo 123;read ANSWER;echo answer=\$ANSWER;sleep 5"
ou
xterm -e 'echo 123;read ANSWER;echo answer=$ANSWER;sleep 5'
Isso é equivalente a sua sintaxe se ANSWER estiver vazio antes da chamada xterm:
xterm -e "echo 123;read ANSWER;echo answer=;sleep 5"
Como você pode ver, a variável é resolvida para o valor e nunca entra no xterm. Além disso, o bash em execução dentro de seu comando xterm é completamente separado, variáveis ou seus valores de dentro não podem ser facilmente passados para fora de seu escopo.