С п.3 разобрался:
в аргументе для ftp_connect указал не локалхост, а свой IP. Скорее всего проблема у меня в настройках iptables, но как решение - пойдет...
По п.2 - явный баг:
пусть для домена zzz нужно добавить 3 фтп-аккаунта: abc, eftp, ftp. Пароли роли не играют.
Добавляем 
abc - все ОК
Добавляем 
eftp - все ОК
Добавляем 
ftp - пуп уже не все ОК: в ftp_group запись пришла, в ftp_users - нет. Для продолжения эксперимента правим в ftp_group запись вручную. Все нормально работает.
Хотим удалить 
ftp - баг, в ftp_group запись принимает вид (старое значение "abc@zzz,eftp@zzz,ftp@zzz") "abc@zzz,e". Т.е. как я понимаю чем-то вроде str_replace снесли все вхождения "ftp@zzz". 
Пороюсь, если найду где поправить - выложу патч.
PS: Может эту тему про фтп-аккаунты вынести в отдельную тему? Или сразу в багрепорт? 

Вариант решения проблемы с удалением "созвучных" аккаунтов.
Code:
--- ftp_delete.php  2010-06-08 04:12:51.005120057 +0300
***************
*** 75,82 ****
    $rs = exec_query($sql, $query, array($ftp_id));
    $ftp_gid = $rs->fields['gid'];
!   $ftp_members = $rs->fields['members'];
!   $members = preg_replace("/$ftp_id/", "", "$ftp_members");
    $members = preg_replace("/,,/", ",", "$members");
    $members = preg_replace("/^,/", "", "$members");
    $members = preg_replace("/,$/", "", "$members");
--- 75,91 ----
    $rs = exec_query($sql, $query, array($ftp_id));
    $ftp_gid = $rs->fields['gid'];
!     $ftp_members = $rs->fields['members'];
! 
!     $ftp_members_array = explode(",", $ftp_members);
!     $members = '';
!     foreach ($ftp_members_array as $ftp_member)
!     {
!         if ($ftp_member!=$ftp_id)
!             $members.=','.$ftp_member;
!     }
!     //    $members = preg_replace("/$ftp_id/", "", "$ftp_members");
! 
    $members = preg_replace("/,,/", ",", "$members");
    $members = preg_replace("/^,/", "", "$members");
    $members = preg_replace("/,$/", "", "$members")