I looked into this and it turns out it's a timezone issue. IB sends bar times either as the number of seconds since 1/1/1970 GMT, or in the format YYYYMMDD. When it sends it with the YYYYMMDD format, that was being interpreted as a GMT date/time and then converted to local time, which depending on what timezone you were in could mean that it ended up being sometime in the evening of the previous day.
This code has been in the KRS ib-csharp library
for a very long time, so it's possible that IB recently changed the date format it uses for daily bars.
This will be fixed in the next version. If you'd like to fix this yourself, you can use the following in IBClient.cs (near "case IncomingMessage.HistoricalData:"):
if (longDate < 30000000)
timeStamp = new DateTime(Int32.Parse(date.Substring(0, 4)), Int32.Parse(date.Substring(4, 2)), Int32.Parse(date.Substring(6, 2)), 0, 0, 0, DateTimeKind.Local);
timeStamp = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(longDate).ToLocalTime();