That is because when you call Destroy(), it waits to the end of the frame before destroying the gameobject, letting the other one exist long enough to instantiate the newObject for the second time.
You can fix this by replacing Destroy with DestroyImmediate, which is called immediately.
By the way, you need curly brackets around your if statement, which close after Instantiate, otherwise you will instantiate an object even if two objects of different tags collide