When does the catch block of try catch run in motoko?

It is not even shared, so it probably doesn’t. Now I am really wondering what happens if the outgoing call that happens inside deposit_cycles_to traps synchronously.

EDIT: This thread seems to answer it: https://forum.dfinity.org/t/error-the-replica-returned-an-error-code-5-message-canister-trapped-explicitly-could-not-perform-self-call/
There it says every await async { … } is its own message which could get executed in a different round. It doesn’t seem to matter if it is in a function or not. That’s consistent with what you said.