If you find yourself needing to manipulate node fields during hook_node_insert or hook_node_update, the best way is to use field_attach_update. Especially, if you need access the node id.
I needed to display a block based on a few conditions: Display on the node page for a particular content type. Only show up if that node had a particular taxonomy term assigned. Drupal let's you control the visibility settings for blocks, but the options are limited to Pages, Content types, Roles, and Users. Content types would allow me to let the block appear for my content type, but not based on it's taxonomy terms.