good job :]
found some little things you can do better
0xff + 1 always == 0x00
so you dont need the if statement there
using pointers you can get the stuck bytes directly from the memory it will make things faster :]
also you can get the types like int,short,float and etc with pointers too, will be faster then using BitConverter
like this
return *((short*)(raw + pos - 2));
will return short from packet pointer
also
public bool Read(ref long pLong)
the mSize should be increaced by 8 and not 4 like
mSize += 8;
cause long is 8 bytes :]
use short,int,uint and etc instand of Int16,Int32 UInt32 and etc classes