If you set your build to start in scene B and bypass the first A->B load, does the second A->B load work?
This is a good idea. Alternatively, you could try setting up an empty scene (C) and go B->C->B to see if it's something to do with scene B (if it's not, you could try A->C->A as well).
Thanks for the suggestion, but, alas, no luck. Going from B->A->B causes a freeze. So, something must be sticking around from B, right? I don't have anything in there with DontDestroyOnLoad. (Additive)Async loading in general does not work in B, whereas it works in A, even running the same code.
I wouldn't count on Unity 5 saving your bacon any time soon.
I tried it out earlier in the thread and concluded that it was a bit of a mess at this point in time.
Well, from the Unity forums there is recent discussion that they're working on the background loading system. A poster there mentioned seeing much quicker load times.
I'll try to stay optimistic. It's not a major issue, I imagine it wouldn't be that common for a user to go exit to the main screen and immediately back in-game. But, still. It's curious to say the least.
---
Edit: Test I did. I made a copy of Scene A (reminder, this is basically just a menu screen). I added to Scene A and Scene A2 each a big chunk of mesh data, each separate. So now both scenes are to identical other than for a big block of data unique to them. I set it up so Scene A would load A2, and A2 load A. Results? Works perfectly. A doesn't freeze, shows a nice progress bar. Neither does A2 when loading A. And I can keep going back and forth without any issue. I'm not sure what this tells me though!
---
Edit 2: Aha! Had a breakthrough. Previously I went from Scene A to B with LoadLevelAsync, and from B to A with LoadLevel. And as explained, that first transitions from A to B went fine, but when I went from B to A and to B again, it froze. I have now discovered that if I go from B to A with LoadLevelAsync instead of plain LoadLevel, and then go A to B, it does not freeze! This effectively solves this problem. I assume this implies that there is some data still in the background from going A to B with Async, and this causes problems next time I do the same thing. But when I go back to A from B with Async, it flushes out that previous data. I don't know, I'm going to bed.