This is likely why the ordering is chaotic: usually "on change" means if a value does nto change, it will not be reported. So if the axis moves 0.1mm and neither of the two force values changes, then nothing will be logged. If only one of the force values changes, then that value and not the other will be logged.
So I think changing to On Demand is the right option, with and on-demand trigger every 0.1mm.
Alternative 1: write a script to parse the on-change file and convert it to fill in the missing values.
Alternative 2: is it possible to combine the axis positions and force values into a single floating-point value? e.g. loggingTag1 = INTEGER(Force1 * scaling_to_integer) + ((axis_position - 166) / 100)? It's a hack that will limit the force value resolution to around four significant figures (0-9999), and now the technician will have to ignore the fractional part of the values in the CSV.
Then log loggingTag1 and loggingTag2, which will change by at least 0.01 every 0.1mm of axis movement, and so will be recorded.