You can see from my code that the conditions set crop_ratio to crop_ratio_new as a last thing when the cropping function finishes, so the values are actually most of the time exactly the same, and only differ when the whole card cropping process is activated by setting a new crop_new value. When cards are spawned both values are also same (0).
But your post did give me the idea so I DID find a solution to the problem that doesn't require any extra variables or other shifty weirdness. It was probably a picking issue since shifting the "for each" condition around fixes it.
I still don't really know why exactly it didn't work the way I wanted in the first place, but I assume the whole condition needs to be checked specifically for each card. But at least now it works with minimal code and looks clean. Here's the final version: