This user has been denied support.
Oh, sorry. Since you posted the code above, I noticed the O option (which returns +0200). I didn't know PHP date supported this, quote from php.net date doc:
Quote:O Difference to Greenwich time (GMT) in hours Example: +0200
P Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3) Example: +02:00
So actually if you use O, it's fine to use date() instead of gmdate(). The gmdate() version is not wrong either (O will just return +0000 then), but date() then has the advantage of being able to tell the user which part (timezone) of the world this thing originated from.
For Atom, you'd have to use P instead of O (instead of \Z), since the : is required (sucks how many different date time RFCs there are), too bad the P was only added in PHP 5.1, so with older versions of PHP you have to cheat the missing : in there somewhere.
So actually as far as I can tell the code as of MyBB 1.4.8 is not wrong, both RSS and Atom specify the correct time (as in, the same instant), the only difference is that they specify the same instant in different time zones.
So the fix could actually be something similar to this for the atom part (code not tested at all):
$somedate = date("Y-m-d\TH:i:sO", $this->channel['date']);
$somedate = substr($somedate, 0, strlen($somedate)-2) . ":" . substr($somedate, -2);
$this->channel['date'] = $somedate;
EDIT: mixed up gmdate and date