There is an error in the LangInt.dll.
The command:
li.ibrd(ud, out response, 200); //where response is a C# string
It works fine if you use a byte array, but if you use a string it will put garbage characters in your string after the read data.
To make sure it was an NI bug, I tried using the NI Spy and a hardware GPIB analyzer to inspect the actual read data. The actual data has no garbage characters in it, only the read data plus a terminator. When the ibrd C# function is executed, it is putting garbage in the response string after the terminator.
I also tried making sure the response string was cleared before executing the ibrd function. (C# strings are immutable though, that shouldn't be a problem)
There must be an error in the NI code where it is taking the raw read bytes and converting them into a string.
FYI - I am using the NationalInstruments.NI4882 dll now. I thought you guys would still like to know. This caused some confusion in the past.