Há algo de maquiavélico nessa questão, e duvido que algo assim caia na certificação. Ela está fortemente atrelada a como a classe Thread foi implementada, não tanto no funcionamento das threads em si.
Por exemplo, quem chama run() duas vezes é a main Thread. Você, a principio, não deveria se preocupar com o estado terminated, pois você não está tentanto reiniciar thread nenhuma. Compartilhar código é algo natural entre threads, e por isso a maioria imaginou que aquele código fosse imprimir normalmente.
Mas, a questão é que a classe Thread limpa seu runnable interno, e isso é o detalhe maldoso. A única invariante que a classe Thread conceitualmente deveria garantir é não ser reiniciada, caso atinja o estado de TERMINATED, não que outra thread possa re-executar seu runnable interno.
Aliás, esse compotamento me supreendeu. Uma construção java válida, que não dará erro, mas resultará em comportamento inconsistente é essa aqui:
Thread t = new Thread(umRunnable);
t.start();
t.join();
new Thread(t).start();
Porém, se t tiver terminado, não haverá erro, e o código também não fará nada. Note que não estou reutilizando threads, mas criando uma nova.
Ok, a maior parte desses códigos para certificações são mesmo abominações e esse é um deles. Mas, justamente ser dependente de implementação, e não de conceitos, é que acho que ele não deverá cair numa certificação no futuro.