É importante entender como funciona o carregamento antecipado do Laravel. Se carregarmos seu exemplo rapidamente, o Laravel primeiro buscará todos os threads. Em seguida, ele busca todos os comentários e os adiciona ao objeto threads. Como são usadas consultas separadas, não é possível ordenar os tópicos por comentários.
Você precisa usar uma junção em vez disso. Observe que estou adivinhando seus nomes de tabela/coluna neste exemplo.
$threads = Thread::leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
->with('comments')
->orderBy('comment.created_at', 'desc')
->get();
Como você está ingressando, talvez seja necessário especificar colunas manualmente para selecionar os nomes das colunas de suas tabelas.
$threads = Thread::select('thread.*')->leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
->with('comments')
->orderBy('comment.created_at', 'desc')
->get();