Hi michaelchau,
If a database is configured to use indirect checkpoints, the oldest page on the database might be older than the checkpoint log sequence number (LSN). In this case, the oldest page can delay log truncation.
You can create CHECKPOINT manually, then backup transaction log again.
Please refer to Factors that can delay log truncation and this similar thread which might help.
Best Regards,
Amelia