From looking at the PCVideoServer source code, it looks like there is a header with the four bytes 0x01, 0x00, 0x00, 0x00, followed by 4 more bytes representing the size of the image as a 32-bit integer. The image is sent as a JPEG.
Code:
success = AxisCamera::GetInstance().CopyJPEG(&imageData, numBytes, imageDataSize);
...
// Write header to PC
static const char header[4]={1,0,0,0};
int headerSend = write(newPCSock, const_cast<char*>(header), 4);
// Write image length to PC
int lengthSend = write(newPCSock, reinterpret_cast<char*>(&numBytes), 4);
// Write image to PC
int sent = write (newPCSock, imageData, numBytes);
It would seem to me that you're passing in those header bytes into Image.FromStream() and that's why it isn't working. Try to use the header information to your advantage. It will mark when an image begins and its length.