well the problem is that the loop keeps running while the conditions are true, creating a huge amount of sprites (tbh I would assume the game to crash).
But because I don't know the context it's hard to tell what you are trying to do.
I think what you should do instead of a while loop is:
if oil is overlapping Sprite
sprite.workersassigned >2
trigger once
than have the actions like they are
but remove the sub events
and instead have the on created ...
and a normal event like
if sprite.BuildComplete = true
trigger once
wait 2 seconds set build complete to false