|There should be no difference in a 301 redirect returned by PHP or by htaccess. A redirect is a redirect. |
Things go wrong when a request results in an unwanted multiple step redriection chain. You should test a selection of canonical and non-canonical requests and look in detail at the Live HTTP Headers extension for Firefox for the results.
Redirecting old site page X to new site page Y should NOT pass through old site page Y or through new site page X on the way.