In ZipEntry.Write.cs there appear to be some fixed length byte buffers that don't really take unicode into account. For example
WriteHeader has this (ZipEntry.Write.cs, Line 703)
byte bytes = new byte; // large enough for looooong filenames (MAX_PATH == 260)
byte FileNameBytes = _GetEncodedFileNameBytes();
Int16 filenameLength = (Int16)FileNameBytes.Length;
When I pass in a unicode filename of say 148, I get back a byte buffer of 358.
The code should allocate a buffer based on filenameLength .