How does elastic search move shards from hot to warm/warm to hot nodes?

It doesn't really depend on cluster health, no, but there are settings to adjust this. To be clear, if you set these much higher than the defaults then you are putting the stability of your cluster at risk.

Not really, no, Elasticsearch just keeps on moving shards until they're all in the right places.

Elasticsearch keeps on writing to the old primary until the new primary is ready to take over.

I don't really understand. The replicas are already up-to-date so there's no need to copy them from anywhere.