honet_jack has found some good links, but I think these are mainly disk based, you are talking about tape.
Please try the following.
command list (DO NOT RUN THESE YET)
1. bpmedialist -m <media id of tape>
2. bptm -delete_all_expired
3. bpexpdate -deassignempty
On a tape that you say should be expired, but is not run command 1.
Do you see it saying the tape is EXPIRED
If not, then it is not the issue I am thinking of. If it does, then continue.
Run command 2.
Run command 1. Does it now show that the tape is not in the database.
If the tape is still showing, and still shows as EXPIRED, run command 3.
Now run command 1. again, is the tape now showing as not available in the database.
Basically, I think the issue is this.
When all images on a tape expire, the tape will expire, but ONLY when bptm -delete_all_expired runs, which is every 10 minutes. You do not see this job run, it is in the background.
At some versions, there is an issue, the bptm command runs, but does not work.
When the NBU image cleanup runs, (every 12 hrs by default) it runs multiple commmads, one is bpexpdate -deassignempty. This does work and will expire the tapes.
I think there is an EEB for this, but most people just run bpexpdate -deassignempty from cron or windows scheduler.
If people have many tapes, and lots spare, although they may have the issue, they never see it, as they do not notice a few tapes not expiring quite on time. It is only reported by people with a few tapes usually, as it is easier to spot in a small environment.
Martin