The example in this report is working correctly. I believe there is merely confusion about how OR blocks work.
OR blocks are unusual in that they are allowed to run with zero instances picked for an object type. In a normal event, the event would be false and not run in that case. Your event looks like this:
Red: is outside layout
Blue: is outside layout
There is a red object inside the layout, and a blue object outside the layout. The event is run as such:
Red: is outside layout? Zero instances meet this condition. However since this is an OR block, a later condition may be true, so we keep running it; however 'Red' has zero instances picked (which is unusual but perfectly allowed/correct in this case).
Blue: is outside layout? One instance meets this condition, so we have determined that the actions will indeed run.
Now we run the following actions. Remember that as per usual, actions only run on instances that were picked by the event's conditions, and that the actions only affect the specific instances meeting the event.
Red: destroy - there are zero red instances picked, so this does nothing.
Blue: destroy - destroys the blue instance picked by 'Is outside layout', since it's outside the layout
I guess it's possibly confusing, but it is in fact completely logical. No 'Red' instances are outside the layout, so no 'Red' instances are destroyed. If the Red object was actually destroyed, that would be quite a counterintuitive result: the action ran on an instance which did not meet the event condition.
Closing as not a bug!