Fish tries to use FIFOs to emulate process substitution, and it leads to deadlock. Not sure why.
By default, Fish actually runs the processes in a strict sequence. But this is to avoid the above deadlock situation. And it therefore isn't process substitution.