I think I have narrowed it down even further. It seems to be only missing the order from the database when the billing address does not match the shipping address. The order is validated by authorize.net (and charged on the card), but when OSC gets the reply from authorize.net that it was successful, OSC starts putting the order in the database, but when it gets to ot_shipping it gets an error - I'm guessing because the addresses do not match?
I think that OSC starts adding to the orders_total table in the database first. The entry for ot_subtotal works, but the next one is ot_shipping and it never gets entered into the database and neither does the total from ot_total. The order_products, order_products_attributes and order_status_history tables never not get entered into the database either, and so the email never gets sent, and the "order successful" page is never displayed, so the customer doesn't know that the order was charged to their card, and they keep trying to enter the order, resulting in multiple charges and multiple missing orders.
So far, I have been manually adding the information to the database that is missing, but this requires you to know exactly what they ordered, with what attributes and what shipping method they used as well as how much the shipping charge was. Most times, if you log into the user's account on the store, you can see that the products were still in their cart. I guess the cart is cleared after the database is updated fully? If you go to checkout, you can find out what shipping charge they used by deducting the products totals from the total that was charged to their card.
Does anyone have any more information about this phenomenon? I cannot figure out what is causing this error, but it only happens when the order is processed by authorize.net and only when the shipping and billing addresses are different.