We don't use $setPublish for anything but deciding whether to update the DB.  It makes things more consistent to just use the "save" method and always insert if its a new object and always update if its an existing object.  If we don't want to update if nothing has changed, we should create an internal 'dirty' flag that tells us if anything has changed.