Is it fine to use hook_entity_view_mode_alter() to intercept an entity view to change the view mode based on an attached field value?
I know it's been a while since you asked...

As far as I can say, if you want use your own module, and not a contributed one, you have to define the view modes using hook_entity_info_alter, for example:

function mycustommodule_entity_info_alter(&amp;$entity_info) {
  $entity_info['node']['view modes']['mycustommode'] = array(
  'label' =&gt; t('My custom view mode'),
  'custom settings' =&gt; FALSE, //Or true if you want to allow a certain role to modify it 
  );
}


After that, you can use the hook_entity_view_mode_alter from your custom module (not working if you are trying to use in from your template.php in your theme). Hope that helps to anyone coming here from search as I did.