I solved the issue, but not in a way that I like much. Here is what I did:
foreach(InvoiceLineItemEntity oInvoiceLineItem in oInvoice.InvoiceLineItem)
{
string sInvoiceId = oInvoiceLineItem.InvoiceId;
string sItemNumber = oInvoiceLineItem.ItemNumber;
long lQuantity = oInvoiceLineItem.Quantity;
oInvoiceLineItem.IsNew = true;
oInvoiceLineItem.InvoiceId = sInvoiceId;
oInvoiceLineItem.ItemNumber = sItemNumber;
oInvoiceLineItem.Quantity = lQuantity;
}
RelationPredicateBucket filter = new RelationPredicateBucket();
filter.PredicateExpression.Add(InvoiceLineItemFields.InvoiceId == oInvoice.Id);
adapter.DeleteEntitiesDirectly("InvoiceLineItemEntity", filter);
adapter.SaveEntity(oInvoice, true, true);
Unfortunately, my InvoiceLineItem entitiy has about 40 columns of various information so this is a lot of typing. I have a few other scenarios where this comes up in our CRM app (Notes have multiple customers, multiple order #'s, multiple files, etc.).
It works for now, but I thought there would be a cleaner way to do it.