What triggers safe-mode?
It looks like the relevant code is in CheckForWarningConditions().  This sets the flags fLargeWorkForkFound and fLargeWorkInvalidChainFound, which are checked by GetWarnings(), which is called in CRPCTable::execute() to check if safe mode should be enforced.

It appears that the code looks for large forks in the block chain, suggesting that miners disagree on which blocks are valid.  The two flags seem to correspond to which camp our client falls in.