OK - QlikView actually preserves the load order perfectly.
I found the actual issue -
My issue was that if the SQL query is not sorted specifically (order by clause), then although the sorting seams in order with a where clause in place it does not mean that all data will be returned in the order required without specifying it.
Referring to my example above the issue was resolved by a simple order by clause - "select * from orders order by order, line"
This can then be written to QVD and read in and the order remains.