set_time_limit может не работать потому что:
You can not change this setting with ini_set() when running in safe mode. The only workaround is to turn off safe mode or by changing the time limit in the php.ini.
Your web server can have other timeout configurations that may also interrupt PHP execution. Apache has a Timeout directive and IIS has a CGI timeout function. Both default to 300 seconds. See your web server documentation for specific details.
Т.е. запуск из командной строки и http запросом в браузере могут по окружению и настройкам именно time_limit а отличаться
Можно пользоваться или GD2, или Imagick
Imagick кушает меньше памяти чем GD при лучшем качестве обработки, по количеству кода особенной разницы с gd нет.
Может быть, некоторые url не подпадают под правила, можно потестировать конфиг тут martinmelin.se/rewrite-rule-tester/, вводя эти самые referer, и посмотреть, нет ли среди них того, для которого не выполнится ни одно правило