From COSWriter.java lines 1268 (trunk) 1500 (1.8)
COSString firstID = missingID ? new COSString( md5.digest() ) : (COSString)idArray.get(0);
COSString secondID = new COSString( md5.digest() );
Notice that digest is called in both lines
The javadoc for md5.digest() goes
"Completes the hash computation by performing final operations such as padding. The digest is reset after this call is made."
So, if missingID == true then the secondID will always be the hash of the empty string.
Acrobat reader uses this value for it's search index, as hinted at here