между прочим, в мане по [m]empty[/m] объясняется различие - empty говорит true, когда переменная не объявлена(NULL), равна нулю или false.
isset возвращает false только в случае, когда переменная не объявлена(NULL), ноль и false - это тоже значения.
насчет всего остального - все зависит от того, что ты хочешь получить и на что проверяешь.