Thanks to mkl's comment (see above) pointing me in the right direction, I've found a solution. Here's a VERY abridged explanation of the fix:
I downloaded and edited the source code for Itextsharp and re-compiled the .dll with the small changes I needed. There's obviously other routes to this, but this turned out to be the simplest and most elegant solution. It really just requires including a few additional OR statements to the present code. I would like to note that there's probably a reason this isn't currently included in the official library, so buyer beware:
In the PdfStamperImp class, there's a few small edits required to make it flatten stamps and behave exactly as I wanted it to. All changes are made to the FlatFreeTextFields procedure:
if (!(annDic.Get(PdfName.SUBTYPE)). Equals(PdfName.FREETEXT))
continue;
}
changes to:
if (!(annDic.Get(PdfName.SUBTYPE)).Equals(PdfName.FREETEXT) | (annDic.Get(PdfName.SUBTYPE)).Equals(PdfName.STAMP)) {
continue;
}
and
if (PdfName.FREETEXT.Equals(annot.Get(PdfName.SUBTYPE))) {
annots.Remove(idx);
--idx;
}
changes to:
if (PdfName.FREETEXT.Equals(annot.Get(PdfName.SUBTYPE)) | PdfName.STAMP.Equals(annot.Get(PdfName.SUBTYPE))) {
annots.Remove(idx);
idx -= 1;
}
As you can see, it's not exactly the most complex change in the world. From here, you simply call stamper.freetextflatten = true like normal and it will now work to get the stamps as well. You could also theoretically get rid of these statements altogether and it would (at least attempt) to do this with all the annotations on your page. I suspect that might not be a safe idea, but I can't be sure.