I see that happening to me, too. I believe it's designed to work that way when you have your address book open in Kontact. For instance, when you first open Kontact and only see "Mail,", then you should be able to save an e-mail address to the address book on the fly. However, if you go to "Contacts" to open the address book, go back to "Mail," and then add a new address, then that one will not be added until you close Kontact. You know what I mean?
What I think is happening is that there are two separate threads handling Mail and Contacts in the same Kontact application. When the Contacts is open, the Contacts thread has the address book file (std.vcf) open with read-write access. That means the Mail thread, which received your request for adding a new address to the address book, cannot change the contents of the address book file.
Instead, the Mail thread creates a copy of the address book (let's say std.vcf_1), saves the new address there, and leaves a flag to let Kontact know that it needs to copy std.vcf_1 to std.vcf when it closes. So the next time you open Kontact, the address book correctly has the new entry.
If you look under ~/.kde/share/apps/kabc/, you'll probably have a few "std.vcf_" files along the main file (std.vcf). Those are the temporary files that have newly added entries.
I just tried my theory. I opened Kontact, went to Contacts to open the address book, went back to Mail and added a new mail address to the address book. Just as I did that, my "std.vcf_4" was updated while "std.vcf" was not. "std.vcf_4" was bigger than "std.vcf," apparently because of the new address. As soon as I closed Kontact, "std.vcf" became the same size as "std.vcf_4."
QED.
