If you were to store your COI's as child-table records against a parent record; you could eliminate all these problems. Store documents as a child table; and have them tagged by a multiple choice field. Then use summary fields to pull back to the parent expiration dates. You can calculate the expiration date with a formula like this:
Case(true,
[Type] = "COI", AdjustYear(ToDate([Date Created]),1)
)
You would then build a Summary field to pull back the Maximum [Expiration Date] field value where [Type] = "COI". This way you can have different document types; but leverage the summary fields to pull back dates into dedicated-fields for use with your subscription reports.
Alternatively; each time you upload a file; populate a date field for the date it was uploaded and then use the same AdjustYear() function in another formula-field to use in subscriptions.