I could be wrong. I can't find anything in the documentation saying you can't use sys* on a filehandle opened with open. Maybe it works on some systems but not on others (like sockets requiring the use of the system functions). Maybe it's a convention I adopted to be on the safe side.
However, you definitely can't intermiggle buffered and system file operations. For example, I can across a piece of code that used select, eof and sysread. It didn't work because sysread always returned 0. eof would move the data from the pipe into the buffer. After changing sysread to read, everything worked fine.