Is there something about process substitution (which I think is implemented with unnamed pipes) that is incompatible with dd?
For example, this fails:
$ dd if=<(unzip -p raspbian.zip) of=/dev/sdb status=progress
dd: unrecognized operand ‘/dev/fd/4’
Try 'dd --help' for more information.
But this works fine:
$ unzip -p raspbian.zip | dd of=/dev/sdb status=progress
108458496 bytes (108 MB) copied, 19.446285 s, 5.6 MB/s
Is the use of if somehow implicitly telling dd that it should be able to seek?