When does Application.loadedLevelName update?

At what point after Application.LoadLevel(x) does Application.loadedLevelName or Application.loadedLevel actually bear any relation to the level that you’ve just loaded?

The following produces unexpected results:

Application.LoadLevel(currentLevelName);
print("Current = " + currentLevelName + " Application = " + Application.loadedLevelName);

In this test, Application.loadedLevelName does not match currentLevelName.

Do I need to wait in a coroutine or something to wait for the level to finish loading?

LoadLevel is like a wide-area Destroy function (all current objects have Destroy called on them), and like Destroy you can expect that it will be completed after the current Update loop.