Is the last change timestamp of `/etc/localtime` newer than the timestamp of your current initramfs file? If so, your initramfs file still holds the old timezones setting and it gets used in the earliest stage of the boot... during which time the system clock is set from the battery-backed Real-Time Clock module. Once the real root filesystem gets mounted, the system will see the correct `/etc/localtime`, but by then it will be too late: the system clock is already set. I'm not too familiar with Arch, but I believe `mkinitcpio` might be the command to use in refreshing your initramfs file. Also, whenever you use `hwclock` to adjust the hardware clock, it will update the third line of `/etc/adjtime` to indicate whether the hardware clock is in local time or in UTC. If the initramfs version of `/etc/adjtime` is out of sync with the one in your real root filesystem, that could cause the system time to gain an offset too.