A listing will expire at the very end of the day of its expiration date (a little after midnight actually).
Example: if the expiration date is Jan 15, Matrix will automatically expire the listing a little after midnight on Jan 16.
If a listing fails to expire on its expiration date, it is usually caused when the list agent (or someone within the chain of ownership of the listing- broker, manager, admin) has the listing locked in Add/Edit when Matrix is running its automatic expiration job (around midnight). If the listing is locked up, Matrix cannot get in to mark it EXPD, so it skips over it and the listing does not expire.
Users should not be in Add/Edit for a listing that is going to expire at midnight that evening.