So, nun habe ich das Problem näher eingekreist und werde einen entsprechenden Fehler an die IBM geben lassen.
Mit den Microsoft ADO-Objekten habe ich 2 sog. Cursorvarianten:
ClientCursor = Microsoft lädt alle Daten in das Resultset
ServerCursor = Die Daten werden erst beim MoveNext abgeholt

Beim ClientCursor komme ich über den "kaputten" Datensatz nicht hinaus, das ist auch korrekt.
Beim ServerCursor (in .NET/Java ist das nur der Reader) kann ich alle Daten ohne Fehler lesen, einen SQLState gibt's da nicht, nur den besagten NULL-Wert.
Nun kann ich die Anwendung nicht auf ClientCursor umstellen, da Millionen Sätze nicht in den Speicher geladen werden können, ganz abgesehen von der dann schlechten Performance.

Lade ich die Daten nun in Excel mit der normalen Funktion "Externe Daten abrufen" wird weder in MS-Query noch in Excel ein Fehler bemerkt.
Die Daten sind halt einfach falsch und damit wird dann gearbeitet.