Retention mechanism in SharePoint uses 2 schedule tasks: Information Management Policy and Expiration Policy. Normally, these tasks will be run every week but due to some requirements, they may be set to run daily.
One of my client experienced with weird bug. They set both task to run daily but the document still didn't expire as expected. We deep drove to the root cause of problem. We found that the
_dlc_ExpireDate property (accessed via PowerShell) was set to Buddhist era as same as the site regional setting. After we changed the calendar to Gregorian and reran the tasks, the retention step could be forwarded and the document expired as expected.
We don't know why the Information Management Policy task stamp the value in
_dlc_ExpireDate as BE instead of AD. We may need to wait 543 years before that document will be expired!
It may relate to this question: Date formatting in Calendars returns wrong day.