Synchronization is done on objects, not on references to objects. If one thread synchronizes on the object that your myObject reference originally references and then makes myObject reference a new object, a second thread may be able to enter the synchronized block before the first thread has left the block since the second thread may synchronize on the new object that was assigned to the myObject reference by the first thread.
The risk of instruction reordering and caching issues inside the synchronized block probably also means that you can not be sure that the first thread has been able to execute anything inside the synchronized block before the second thread enters. In other words, you can probably not assume that your first line called ‘…stuff…’ has been executed, nor that the newly created SomeObject has been fully initialized in its constructor, even though it may seem (from a single-threaded perspective) like those things would have had to happen before the second thread could enter the block.
I guess there is no rule in Java that prevents VMs from crashing in this situation since a VM could theoreticly do the reference assignment before it has initialized the new object enough for it to be able to handle synchronization. The exact behaviour is quite OS and hardware specific though.