I just plowed headlong into this issue - I would have commented on the 'right' answer by Andy Chang, but not enough rep!
'overlapped' is another term for Asynchronous (Boppity Bop) and I can confirm that a single pipe, with both client & server using PipeOptions.Asynchronous operates full duplex without locking up.