(Truth in advertising... I don't know much about this ;-) )
Reading the documentation where it says
On systems that support pipes, OpenRead["!command"] runs the external
program specified by command, and opens a pipe to get input from it.
perhaps that suggests that you need to open the pipe directly in the argument of OpenRead rather than first creating it using Run?
When I try this it seems to work:
In[3]:= OpenRead["!mkfifo /tmp/test.fifo"]
Out[3]= InputStream["!mkfifo /tmp/test.fifo", 237]