Gastei um tempo com esse bug e queria atualizá-lo com minhas descobertas. Basicamente, confirmei tudo o que você já disse: o processo de restauração é assim:
migrate_database
reconnect_database
...
extract_uploads
O problema é que, após a tarefa de migração, o reconnect_database não muda para o banco de dados desejado, mas começa a trabalhar no padrão.
Portanto, este código está errado:
def extract_uploads
...
current_db_name =
RailsMultisite::ConnectionManagement.current_db # padrão
optimized_images_exist = File.exist?(File.join(tmp_uploads_path, 'optimized'))
Uma solução maltrapilha seria usar aqui @current_db, que ainda contém o nome correto, em vez de RailsMultisite::ConnectionManagement.current_db, mas isso não resolve o problema real de por que o reconnect_database não está funcionando corretamente.
Preciso investigar mais a fundo para encontrar o problema.