So, it turns out I had an unrelated bug and was accessing the wrong struct instance - this was why the "error" case was all 0-values 0_o
It looks like this struct definition actually is correct - hopefully this question helps anyone in the future who needs to handle c unions via C# code