If the display type is hidden, it gets updated to link_hidden. It should probably be checked against a whitelist of link's known display types.

Additionally, I think it is okay to use field_read_instance() and field_update_instance() in update functions. The API within Drupal 7 should be stable.