How can I tell when `rescanblockchain` is finished?
rescanblockchain will block until it is complete. This will happen for any RPC which rescans the blockchain.

However, this does not mean that the RPC interface is unusable. You can still interact with it from another thread. If a rescan is taking too long, you can use abortrescan from another thread/process (e.g. another terminal session) to cancel the ongoing rescan.

There are no RPCs for seeing the progress of a rescan. However, if you are using bitcoin-qt, a dialog window will appear with a progress bar showing the rescan progress.