I think the two failed async calls in your first example are irrelevant. In my understanding a value in a nonisolated(nonsending) closure can be potentially merged to the actor isolation region of its caller, so it shouldn't be transferred to global executor or other actors no matter if the closure is also sending or not.
EDIT: sorry, I later realized I probably misunderstood it. while values in a nonisolated(nonsending) could be merged to the actor isolation region of its caller indeed, it shouldn't be assumed it always happens. Instead it should be analyzed based on closure body by RBI. I created a separate thread asking about why these two async call didn't work.