I'm not sure but I think it's a DST thing. If you are just doing offsets, you have to remember that while JST is usually GMT+9, during the period that GMT is in DST, JST is actually GMT+8. So if you are using the DST version of GMT as a base you end up wrong.
If instead you would use UTC (which doesn't have DST) as offset, it would work right (since JST is always UTC+9). Letting .Net do its thing might be better though, at least that way you can get rid of that rediculous "It's daylight savings time" checkbox and
handle that automatically.
I think that this issue will be complicated further by the fact that the US have decided that their daylight saving time should be on a different schedule