Speaking from experience with Finale 2006, this is indeed a bug. Finale sometimes "forgets" to replace accidentals after certain alterations to entries - on which the accidental is syntatically correctly hidden - which necessitates re-placement of the accidental (for example, removing the cross-barline tie between two notes with written flats, although this doesn't
usually happen). I have often tried to work out what exact conditions result in Finale forgetting to put the accidental back, but there appears to be no hard-and-fast rule.
However, as you suspected, Finale is
not ignorant of when the user or itself has deliberately removed accidentals. While using the
Speedy Entry Tool, an asterisk usually appears at a bottom corner if there are accidentals whose visibility is contrary to what the notation convention dictates.
For example, a cursor will be "starred" when moved to an entry containing a cautionary accidental (the accidental isn't necessary there but is forced to be visible).
Another example is with "fake ties" (I won't go into detail as to why sometimes a fake tie drawn using a slur is more preferable than a real tie). Here the accidental should appear on the later entry (because as far as Finale is concerned it's only a slur) but the accidental can be hidden (see below). When you run the Speedy Entry cursor over this entry, you will see an asterisk (because the accidental IS supposed to be there, but it isn't there).
Just to make it clear again, the asterisk doesn't mean the accidental is supposed to be there, but it means the accidental's visibility is syntactically correct.
You can change the visibility of the accidental by hitting the asterisk key on your entry, making sure that the
vertical cursor is on the exact note for which you want to show/hide the accidental. The asterisk sign at the corner will show/hide according to whether the result is syntactically correct.
You could run your speedy entry cursor through your pieces and see, but this could take a while. Nevertheless, I think the above information is useful for editing isolate cases.
I also suggest trying out the
Cautionary Accidentals plug-in. This will place cautionary accidentals at appropriate places depending on the settings you give it, and I'm
guessing that it also puts accidentals on places that should have them, too. This may or may not solve your problems, but it's definitely worth a try. Just watch out for one thing: this plug in will put
two accidentals on an entry which is shared between two voices and sharps/flats will appear like double-sharps/double-flats. I usually just correct these manually. It's a pain, but life isn't all rose petals

Also, I have found no automated way to "reverse" cautionary accidental assignments yet (except Undo, but that obviously doesn't work after you've reloaded the piece), so save a copy of your work before using it!
I realise this is a bit convoluted, but I hope it gives you more things to play around. I would post image examples but I don't have internet at my new home yet (I'm replying to this at work).
ETA:
The only user-created error I can think of is accidentally hitting the asterisk while using speedy entry. Since asterisk is also SHIFT+8, and 8 is a semibreve, and 9 - the next key - forces enharmonic respelling, I guess this could happen once in a while if you are very fluent in Speedy Entry and use all these features. Also, sometimes Finale gets "confused" if you keep hiding and showing conflicting accidentals in different voices on the same staff, put ties on them, and then transpose afterwards.