It appears that the article expiration settings were lost for some articles.
Testing with new articles shows the expiration feature itself works correctly (articles expire and move to draft as expected), suggesting the issue affects previously published content. This may have caused older articles to lose their expiration settings, preventing them from expiring automatically and stopping expiration notifications from being sent.