According to ?timezones invalid time zones are treated as UTC often without warning. Your particular environment probably does not know how to interpret America / Chicago. The documentation indicates that it is incompatible.
Try using "CDT" instead of "America / Chicago." In addition, the ?timezones have details on how to submit an R list of time zone formats for interpretation.
UPDATE: as.Date returns a date object, not a string of characters. as.POSIXlt will be, quote: "Dates without time are considered to be at midnight UTC", from as.POSIXlt . Thus, it seems that x is a date object in as.POSIXlt and has no time value, the tz parameter is ignored and replaced with UTC .
As a result, another parameter should ensure that the date object passed to as.POSIXlt already has a time and time zone. Or, convert the object to a character string before passing it to as.POSIXlt so that it uses its own tz option.
source share