I can help with the 2nd part of your current workflow. I've written a Java library which maps lat/long's to timezones, where the database is encoded in the source code.
The source code is basically an enormous tree of if statements: if (lat >= -33.0) if (lng < -151.5) ... else ... and so on. It's just a single class. So if you use C# it would be trivial to port it.
http://www.edval.biz/mapping-lat-lng-s-to-timezones
It's accurate to 22km.