I'm not sure if the problem's with the docs, the code, or me! From reading the description I understood that I can start with an empty instance array, fill in the three required fields (entity_type, bundle, field_name) and then add any fields I want to overwrite. So if I only want to change the default value, I only need four keys in the array: entity_type, bundle, field_name, default_value.
It doesn't seem to work this way. The prior instance is loaded, but it's not added to the instance array passed in. I ended up resetting some instance settings by passing in such a minimal array. By loading the field instance first with
field_info_instance() and then modifying values it worked as expected. As I say, I'm not sure if I've just misunderstood the docs/something, if the docs are right and this is a code bug, or if the docs are wrong.
PASSED: [[SimpleTest]]: [MySQL] 40,360 pass(es).
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch field-update-instance-1786740-26-D7.patch. Unable to apply patch. See the log in the details link for more information.
PASSED: [[SimpleTest]]: [MySQL] 54,791 pass(es).
PASSED: [[SimpleTest]]: [MySQL] 54,849 pass(es).