In Drupal 7, say you are in the module xyz and you want to include xyz.admin.inc., you should always use
module_load_include('inc', 'xyz', 'xyz.admin');
require_once dirname(__FILE__) . '/xyz.admin.inc';
Here is a typical scenario where this breaks your site completely:
Say you start a project by downloading a bunch of modules to sites/all/modules.
Eventually, you have custom features, custom modules and contrib modules all in the same folder.
It is very common in this case to move modules to three sub-folders, contrib, custom, and features.
When you do this, Drupal's registry breaks down and you can no longer clear the cache, but the Registry Rebuild tool does a good job of rebuilding the registry.
However, rebuilding the registry only works if you don't have require_once directives lying around. These will break your site until you change them with module_load_include()s, rebuild your registry again, and clear your cache.
Some related Drupal issues I just filed: