As far as I see our support engineers have replied on this in the HelpDesk.
Just in case someone faces the same problems, I'm copying the answers into there:
1) Person orders 6 items, of which 4 items are backordered. The remaining 2 items which are NOT backordered, however, are NOT removed from inventory properly - they should be.
This was caused by missing database records (which for some reasons were not imported during the module upgrade).
Run the following SQL query:
SELECT p.id, p.payment_status_id, ps.code AS 'payment_status_code', p.shipping_status_id, ss.code AS 'shipping_status_code', p.incStock FROM xc_order_status_properties AS p LEFT JOIN xc_order_payment_statuses AS ps ON ps.id=p.payment_status_id LEFT JOIN xc_order_shipping_statuses AS ss ON ss.id=p.shipping_status_id;
If you don't see records with "BO" in the 'shipping_status_code' column, then it is the case.
To re-run the module upgrade hook use the following command in an SSH terminal to your server:
php xc5 utils:runHook classes/XLite/Module/QSL/Backorder/upgrade/5.3/5/post_rebuild.php
You may check if the "BO" records appear in the database after executing this script.
2) As someone else mentioned, under Orders >> Backordered products there is a huge list of orders with backorders pending.
This seems to be caused by the use of custom order statuses. The module drops the "backorder" flag for orders when their status changes from "Backorder" to any of the built-in statutes. Since you switched the status from "Backorder" to a custom one, the module failed to catch that moment and decided to not update the flag.
The developer will try to revise this logic in future versions of the module.
For now, as a temporary solution, you can manually switch the status back to "Backorder" and then to any of the built-in statuses ("Shipped", or "Delivered").
This should help.