Using the following block of code, the listItem.Update fails with a NullReferenceException:
        SPWeb web = null;
        SPList list = null;
        SPListItem listItem = null;
        try
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(this.SiteUrl))
                {
                    web = site.OpenWeb();
                    list = web.Lists[this.ListName];
                    listItem = list.Items.Add();
                    listItem["Background"] = "foo";
                }
            }
            );
            listItem.Update();
        }
        catch
        {
        }
        finally
        {
            web.Dispose();
        }
If I move the listItem.Update() method inside of the anonymous delegate, I get "Operation is not valid due to the current state of the object."
Yes, I've combed through SO and have tried many permutations without success.
Any ideas?
Update: After the first comment, I tried to remove the anonymous delegate from the code to see if it fared any better:
    // store the selected item to pass between methods
    public T SelectedItem { get; set; }   
    // set the selected item and call the delegate method
    public virtual void Save(T item)
    {
        SelectedItem = item;
        try
        {
            SPSecurity.RunWithElevatedPrivileges(SaveSelectedItem);
        }
        catch
        {
        }
    }
    public virtual void SaveSelectedItem()
    {
        if (SelectedItem != null)
        {
            using (SPSite site = new SPSite(this.SiteUrl))
            {
                using(SPWeb web = site.OpenWeb())
                {                    
                    SPList list = web.Lists[this.ListName];
                    SPListItem listItem = list.Items.Add();
                    //UpdateListItem(listItem, SelectedItem);
                    listItem["Background"] = "foo";
                    listItem.Update();
                }
            }      
        }
    }
And this still fails "Operation is not valid due to the current state of the object." In both code samples, it looks like site.Impersonating is false. I am using Windows Auth, and Impersonation in the web.config. This is running from the ASP.Net Development server.