Thank you all. System is 64bit x86_64, Lazarus 2.0.10, fpc 3.2.0, Kernel: 4.19.0-6-amd64 x86_64 (as I should have said before).
I do have appropriate udev rule in place, I think, and I can apparently access the device. 'WriteFile' is returning without error and the target device is responding as expected.
The target response in this test instance is fixed (4 bytes MCU ID code + 2 byte checksum) so I know what I should be getting every time, and can see the correct data appearing on the Wireshark trace. Some (not all) of those byte values are consistently appearing in the readBuffer content after calling ReadFile, though not as the 'value' fields but as the lowest byte of the 'HID' field. So alignment does seem to be a major part of the problem.