Первые поллы JoinHandle'ов регистрируют наш интерес, затем высокоуровневая таска яйлдит и реактор может её не будить пока смерть одной из подтасок её не разбудит.
Ну, мне непонятно, чем тебе FuturesUnordered не подходит. Можно положить в него все JoinHandle, один раз вызвать next, а потом с помощью iter_mut обойти все оставшиеся.