OK, so after some testing, here's what I found out.
PHP's getdate() function IS working correctly. it IS getting the timezone information as it should, and displaying dates correctly.
What is happening is that the use of a certain function is "changing" PHP's interpretation of timezone information (somehow, I don't really know how) so that before the call to this function, things work fine, and after it, PHP is now in GMT mode.
The problem is, it is the compare() function from the PEAR

ate class. I did some reading in their comments, and they talk about converting timezones and such, and say that it may not work correctly on systems which do not have "zoneinfo" on them. which as i found out is a system utility, one that my RH7.1 does not have installed.
So, even though I don't know what PEAR

ate is doing, i guess it is setting something incorrectly as far as environment variables for the timezone to GMT.
and btw, this is not happening persistently at all.. things are reset to normal after each page load. so its just some temporary in memory change. kinda like changing the php error reporting level temporarily.
I worked around this problem by calling getdate() earlier on in the execution of the PHP script, and assigning that value to a variable, which i then use in place of the later getdate() calls, and all works as expected... relatively speaking anyway.