That is due to a flag that's probably set about your item and it wasn't
fully released by Outlook. I've seen that sort of thing sometimes,
especially if there's code in a custom form as well as in an addin and both
are working on the same item.
In Outlook 2007 there's an Unload() event that fires when Outlook finally
unloads an item from its internal cache, that event can fire long after the
item was closed. I think that's related also to what you're seeing.
You really only have a few choices. You definitely should go over your code
to see what if anything your code changes and which of the events such as
Close() and Write() you're handling. You can also make use of saving an item
and closing it with olDiscard as an argument.
What I usually do, and it works in the majority of cases but not 100% is to
hold a flag for when I save an item using code and I work with that in any
Write() event handler. If I called Write() I take certain steps and if the
user forced Write() I take different steps. I can check the flag and also
the Saved property of the item when it's being closed and decide on actions
to take such as saving or using olDiscard, and if necessary and the item was
saved but I want to discard it I can get EntryID and find it in Drafts and
delete it.