This is not a bug in PDF-ShellTools.
The problem occur because the Acrobat API PDFDoc.SetInfo method, that only accesses the document basic metadata fields, don't update the more advanced XMP object correctly.
The PDF XMP object keeps the keywords in two places: the <pdf:Keywords> node, of the pdf namespace (as a semicolon separated list of keywords string) and the <dc:subject> node, of the dublin core namespace (as a Bag list of individual keywords). The document SetInfo method only updates the keywords under the PDF namespace. From the Acrobat file properties dialog, or PDF-ShellTools, you read/write both namespaces. When the keywords listed in both namespaces are not the same, you get a merged list of both. That's why after running your code it appears it appended your added keywords to the already existent ones.
To deal with this:
You may use the Acrobat JSObject, you get from the PDFDoc.GetJSObject method, and then deal with the XMP xml string you can get/set from the JSObject.metadata property. You need to parse/edit this XML from your VBA, or even on the Acrobat JavaScript engine itself (using the JSObject.console). Take a look to the example 3 of the metadata property in the "JavaScript for Acrobat API Reference" manual for what needs to be done in order to edit the XMP.
Or you may call the PDF-ShellTools
SetMetadata function from the command line interface, or, probably even better,
the DLL interface, from your VBA code to set the metadata.