Even if most search engines do figure out your intent, these external redirects nevertheless appear to be unnecessary, slow the "user experience" by resulting in two client-server transactions per "user" request, and create double log entries (one redirect, one 200-OK) for each of those requests, which may inflate and affect the usefulness of your site's "stats."
A better approach would be to avoid these external redirects entirely by replacing them with additional internal-rewrite rules in your .htaccess file or --if you prefer doing things with PHP-- changing the PHP code to "include and then echo the proper page content" instead of redirecting the client.
In PHP, sending a "Location" header to the client results in a 302-Found redirect.
In PHP, Sending a "Location" header plus a server status of 301 gives a 301-Moved Permanently redirect.
In PHP, "including" a file and then sending that file's contents to the client is essentially equivalent to an internal rewrite (URL-to-internal-filepath translation) in .htaccess using mod_rewrite.
I agree that you should never allow the situation where you link to a URL that is always 301-redirected, while linking to a URL that is always 302-redirected is a bit more "forgiveable" in search engines' eyes (and many fairly-big sites do this). But really, you should never redirect the client unless the requested URL is actually wrong in some way -- and never link to a "wrong" URL from your own site, regardless of the redirect code returned.
I defer to Tedster's learned judgment on the "level of SEO harm" here, but unnecessary redirects certainly cannot be good for a site.