To answere my own question (having worked on it all day yesterday, without sucess) the answere is:
Cast the fields I'm importing as numeric in the sql query.
Context: My data is stored in postgres as a mix of types, including both numeric and double. These were all (rightly) being imported into doubles in matlab, as should by databaseImportOptions. It was something of a leap in the dark, but my sql now looks like this:
'SELECT "Journey", "SystemTime", "PacketTime", "Tacho", "TrainSpeed" ,
"GNSS_SmpsSincePrev", "GNSS_SolTime", "GNSS_Lat"::NUMERIC , "GNSS_Lng"::NUMERIC, "GNSS_EllipHeight", "GNSS_MSLHeight", "GNSS_Speed", "GNSS_HAccuracy", "GNSS_VAccuracy", "GNSS_SAccuracy",
"GNSS_ValidFlags", "GNSS_FixType", "GNSS_SmpStat",
"BogieIMU_AccX"::NUMERIC, "BogieIMU_AccY"::NUMERIC, "BogieIMU_AccZ"::NUMERIC, "BogieIMU_GyroX"::NUMERIC, "BogieIMU_GyroY"::NUMERIC, "BogieIMU_GyroZ"::NUMERIC, "BogieIMU_SmpStat",
"BodyIMU_AccX"::NUMERIC, "BodyIMU_AccY"::NUMERIC, "BodyIMU_AccZ"::NUMERIC, "BodyIMU_GyroX"::NUMERIC, "BodyIMU_GyroY"::NUMERIC, "BodyIMU_GyroZ"::NUMERIC, "BodyIMU_SmpStat"
FROM public."SamplesAndData"
WHERE "Journey" = %d'
and it works. Note that I've only cast those fields that were stored in postgres as doubles.
It fields like some weird bug in the native postgres libary, but any future readers now know as much as I do!