I think this is by design.
'OR' blocks have to run every condition in the block to set up the SOL properly. If it didn't, events like
+ Sprite X < 300
+ Sprite Y < 300
would not pick the correct instances. So: in an OR block, every condition is run to set up the SOL.
In this case 'Text is visible' is true, so the entire OR block is true and will run. However, 'Sprite is not visible' is still run, and results in no Sprite instances being picked because none meet the conditions. When no objects are picked its expressions return 0.
I think this makes sense actually when you consider if you just used "Sprite is not visible" on its own the event would not run at all. So the fact you used an OR block to make it run anyway, means you still get no Sprite instances picked. Using 'Pick all sprite' seems like a good workaround in this case, since you want to undo the picking that a previous condition has done, which is what it's designed for.
Using a trigger makes the block run differently: when a trigger in an OR block is run, the other conditions aren't run. It makes no sense to. So in that case it runs literally as "On start of layout: set Text to Sprite.X...", in which case all Sprites are picked.
Do you think it should work differently? It just seems like a confusing case of using OR blocks.