ZSH: Output from stdout from within while read gets lost

I ran into a weird ZSH issue. I have trimmed the script to the smallest form that still reproduces the issue.

What I'm simulating here, is monitoring a directory for changes via a subprocess (the actual script uses fswatch). Because I'm monitoring, it means I cannot run a command beforehand and save the output. A (working) example is the following:

(echo "text.txt"; echo "text.txt") | while read filepath; do scp "$filepath" "trip:~/tom/"; echo $?; done
text.txt                    100%  822    51.1KB/s   00:00
0
text.txt                    100%  822    99.1KB/s   00:00
0

Now, when I add a delay in the middle, seemingly any delay that is longer than the runtime of the scp command inside the while-loop, suddenly the second output and any subsequent command of scp will not visible:

(echo "text.txt"; sleep 2; echo "text.txt") | while read filepath; do scp "$filepath" "trip:~/tom/"; echo $?; done
text.txt                    100%  822    51.1KB/s   00:00
0
0

Interestingly enough, the echo still works and errors show up like you may expect.

(echo "doesnotexist.txt"; sleep 2; echo "doesnotexist.txt") | while read filepath; do scp "$filepath" "trip:~/tom/"; echo $?; done
doesnotexist.txt: No such file or directory
1
doesnotexist.txt: No such file or directory
1

What is going on here? I hope someone can help me clear this up. Thank you!

Edit:

After some more fiddling, it appears this has something to do with ZSH, as it works in a normal bash-shell.