When hook_field_info_alter is invoked?
It's invoked in several places. It happens in _field_info_collate_types(), which is called from


field_info_cache_clear()
field_info_field_types()
field_info_formatter_types()
field_info_storage_types()
field_info_widget_types()


So there's a fairly large surface area for invocation.

hook_field_info() is for providing metadata about fields, though, so using it to programatically hide a field is doomed to failure. You simply don't have that option in the info hook.

Depending on what you mean by "hide" you'll either want to implement a form alter hook (to remove a field from a form), or a preprocess/view hook to hide it from being rendered, or maybe both. Obviously YMMV if you mean something other than those options.