Minimum entity properties for field_attach_update()?
EDIT - Actually, it turns out that the core team have decided that passing in anything less than the whole entity to field_attach_update() is officially Wrong and not to be done. See http://drupal.org/node/1483736, if there is a file field (therefore, also media fields, image fields), and you update using field_attach_update() without including all the file field data, the file fields will be wiped.

So the correct answer in terms of the thinking of the core team is actually, all of them. As far as I know, it's only file fields that break like this, so you theoretically, in cases where passing in the whole entity object breaks, you could pass in entity id and bundle as below plus any previous file fields, but there's no guarentee nothing else would break.



Original answer -  Actually after more testing and debugging, that first article seemed to have it spot on. The entity needs:


The entity id (as above)
The bundle (as above)
The field data, keyed with language (even if not applicable) and delta


(basically, so there's enough data to identify the entity and field instance) 

...so my example above should have had:

$lightweight_entity-&gt;field_some_field[LANGUAGE_NONE][] = array(  
      'some_key' =&gt; 'some_data' 
      'another_key' =&gt; 'more_data' 
      );


And if the field name is dynamic, needs curly braces:

$lightweight_entity-&gt;{$field_name}[LANGUAGE_NONE][] = array(  
      'some_key' =&gt; 'some_data' 
      'another_key' =&gt; 'more_data' 
      );


Another relevant thing to note is, on a multi-item field, it replaces all items with what is entered here, regardless of what you put for the delta. E.g. if you have 5 items already, and try to add a sixth like this:

$lightweight_entity-&gt;{$field_name}[LANGUAGE_NONE][6] = ...


...it'll wipe the other 5. So, for multi-item fields which can already have data, you need to populate the mini-entity with all the items for that field before saving, for example:

if (!empty( $entity-&gt;{$field_name}[LANGUAGE_NONE])) {
  $lightweight_entity-&gt;{$field_name}[LANGUAGE_NONE] = $entity-&gt;{$field_name}[LANGUAGE_NONE];
}
$lightweight_entity-&gt;{$field_name}[LANGUAGE_NONE][] = ...