If you've got access to db you should be able to work out the problem items using this query.
SELECT so.increment_id, so.entity_id, soi.order_id, soi.sku, soi.qty_ordered, soi.qty_invoiced
FROM sales_order so, sales_order_item soi
WHERE soi.qty_ordered != soi.qty_invoiced
AND so.entity_id = soi.order_id
Update qty_invoiced
where necessary
As for cause in my experience these problems are caused by 3rd party payment extensions.
Unfortunately I can't be more specific than that.
Were theythe problem orders all paid for the same way or is it just the one order? If so might be worth reaching out the developer who produced the extension. Although this could be a tricky problem to track down.
With regards to totals you are going to have to check the following amounts
SELECT `base_subtotal`, `base_subtotal_invoiced`, `base_tax_amount`, `base_tax_invoiced`, `base_total_invoiced`, `base_total_invoiced_cost`, `base_total_paid`, `base_total_qty_ordered`, `grand_total`, `subtotal`, `subtotal_invoiced`, `tax_amount`, `tax_invoiced`, `total_paid`, `subtotal_incl_tax`
FROM `sales_order`
WHERE increment_id = 000000002
where 000000002 is the increment_id
of the affected order
You will have to manually update any values you find are incorrect.