Thank you so much,
but I have identified the root cause of the issue. Once we removed our custom Input_Wrapper block that uses Placeholders, the upload widget started validating correctly.
However, I still do not fully understand why the Input_Wrapper block causes this problem and how wrapping the upload widget inside a placeholder-based custom block interferes with the validation behavior.