Es lo primero que se me vino a la mente, pero tengo entendido que la función DateTimeZone.LocalNow() traerá la hora con la zona horaria, y luego la función DateTimeZone.SwitchZone() hará el cambio a “-4”, que sería la hora de Chile.
¿Puedes hacer pruebas obteniendo únicamente el valor que te da DateTimeZone.LocalNow() para ver la hora (y zona horaria) que obtiene?