Instead of returning the GMT, this appears to returns a time that's simply the $asctime shifted by the current $timezone value, regardless whether the parameter is for a date falling during the opposite daylight daylight condition. $timezone has always changed value depending on whether the current time is during/outside daylight time, where $timezone + $daylight is always the same total, so perhaps the current $timezone value is being applied to all $gmt(number) values throughout the year.

That is exactly what is happening.

When $gmt() was added (v5.51, item 43), its purpose was to support $gmt(format), not $gmt(N). It should have returned an error with N but it didn't. Some scripters started using $gmt(N) and, over time, requested that N be interpreted differently, so it was changed a few times.

If you test this with mIRC v6.35, does it return the value you are expecting?