Synchronization of two lists
I haven't tested this due to time constraints, and lack of knowledge of the data, but from my understanding of the problem, this should work.

I have taken the linq join queries, two for the insert, two for the delete and created two IEnumerable.Where clauses, one for insert, one for delete.  The two sets of criteria are combined in an OR statement within the .Where statement.

The one thing I wasn't sure on is if the original list needed to be returned.  That wasn't clear in the original code.  If it does need to be returned, that's an easy change to implement.

EDIT: Changed to do work per Kyles suggestion in comments.

public IEnumerable&lt;AssetBlob&gt; Synchronize(IEnumerable&lt;AssetBlob&gt; assets, string id)
{
    var assetsList = assets.ToList();

    //Get list of devices already checked in lineitemsmap
    IEnumerable&lt;LineItemsMap&gt; lineItems = auditRepo.GetLineItemsMap(id).DeviceResults;

    var items =
        assetsList.Where(
            existingAsset =&gt; 
                // ExisingItems that need updating
                // Any returns true if any of the items in a list meet the criteria
                lineItems.Any(lineItem =&gt; lineItem.BlobId == existingAsset.Id &amp;&amp; existingAsset.Imported &gt; lineItem.Created) ||
                // New items that need inserting.
                // All returns true if all of the items in a list meet the criteria
                // therefore All == !Any
                lineItems.All(lineItem =&gt; lineItem.BlobId == existingAsset.Id)).ToList();


    var deleted =
        lineItems.Where(lineItem =&gt;
                        assetsList.Any(existingAsset =&gt; existingAsset.Imported &gt; lineItem.Created) ||
                        assetsList.All(existingAsset =&gt; existingAsset.Id != lineItem.BlobId)).ToList();

    // If there is a foreach in RemoveLineItemMaps you can probably remove this check.
    // Just cleans up the code a little, and the foreach will take care of this check.
    if (deleted.Any())
    {
        auditRepo.RemoveLineItemMaps(deleted);
    }

    return items;
}