Constructor of WinSerialStream class calls twice Marshal.StructureToPtr method on lines 114 and 120 of WinSerialStream.cs. The third parameter of StructureToPtr - fDeleteOld, is specified as "true" but it must be "false" because StructureToPtr operates with newly allocated memory and there is nothing to be deleted there. In this case StructureToPtr does not crash just because NativeOverlapped structure does not contain fields of reference type.
To be more precise - the following lines in WinSerialStreamcs
Marshal.StructureToPtr (wo, write_overlapped, true);
Marshal.StructureToPtr (ro, read_overlapped, true);
Marshal.StructureToPtr (wo, write_overlapped, false);
Marshal.StructureToPtr (ro, read_overlapped, false);