Sysread may return a parital result (that is, read less characters then requested) any time. Indeed, it must return exactly one packet with datagram sockets like udp.
Read cannot do that except at the end of file.
Sysread bypasses buffering, and also perlio layers to some extent.