The way the engine works, a condition is always false, regardless of the state of invert, if there are no instances of that object which exist. In other words an event will not run if no instances met the condition. I would prefer not to change this, because "is on-screen" or "is off-screen" simply makes no sense to ask if there are no instances that exist.
Rather than change how the engine works, the workaround is simple: just replace 'is not onscreen' with 'Bullet.Count = 0', and destroy any bullets that are not onscreen.
Closing as won't fix.