If you've got access to db you should be able to work out the problem items using this query.

```sql
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 the 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

```sql
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.