При конвертации дат из разных часовых поясов главное учесть что в разное время смещение тоже разное.
Какое именно сейчас смещение, можно определить через:
TimeZoneInfo.FindSystemTimeZoneById(zoneName).GetUtcOffset(date);
Для наглядности приведу тест показывающий как меняется часовое смещение со временем:
[Theory]
[InlineData("2017-11-16T10:02:27.9362420+00:00", "2017-11-16T13:02:27.9362420+03:00", 3)]
[InlineData("2012-11-15T10:31:05.0307284+00:00", "2012-11-15T14:31:05.0307284+04:00", 4)]
public void DateTimeOffsetTest(DateTimeOffset date, DateTimeOffset expectConverted, int expectOffset)
{
var moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time");
var offset = moscowTimeZone.GetUtcOffset(date);
var converted = TimeZoneInfo.ConvertTime(date, moscowTimeZone);
Assert.Equal(expectConverted, converted);
Assert.Equal(expectOffset, offset.TotalHours);
}