I think I figured it out.
It almost certainly is a bug.
The problem is that OR blocks with the System object picking another object are functionally the same as AND blocks.
If you do
System: Pick Sprite by evaluating 0 //this is automatically false
OR
System: Pick Sprite where Sprite.UID = 0
Then nothing is picked, even though there is a sprite with UID as 0. This shouldn't be the case.
If you do
System: 0 = 1
OR
System: Pick Sprite where Sprite.UID = 0
Then it successfully picks the sprite whose UID is 0. This is working as it should.
If you do
System: Pick all Sprite
OR
System: Pick Sprite where Sprite.UID = 0
it will select only the one sprite whose UID is 0. This is a design decision, but I consider it a poor one if it is intentional. It should pick all the instances of Sprite, because an OR block should stop evaluating the other conditions once it finds something that is true.
The argument would be that for example System 0 = 0 OR System pick Sprite.UID = 0 will keep the full Sprite instance list. Even so, that IMO should be how Construct operates. They can handle the picking in a sub-event if a non-picking OR condition is true.