I was about to link this post until I realized you were the original poster of that topic as well.
This design limitation makes sense and should not change. Allowing non-final variables to be smart cast is unsafe. Yes, race conditions are one concern but it’s also the least of the concerns. The real issue is any side effect that would cause the value to change.
In your case, you should perform an unsafe cast of your object. This is what you’re wanting the compiler to do for you, unsafe smart-casts.
Of course, you could also change your code to be safe by capturing the non-final variable using a local variable or closure, but that’s not directly addressing your proposal for unsafe smart-casting.