Category entity relationship / subtype relationships design
I think this looks pretty reasonable for a system in which a user can add comments or attachments associated with a contract, a specific line of the contract, or a proposed modification to a line of a contract.

Since you asked for potential shortcomings or pitfalls, here are a few you might consider:


Without knowing much about your system, it seems strange that a variation must apply to only one contract line.  Is there ever a case where a variation might apply to multiple lines?  And then a user might want to comment on the multi-line variation in its entirety?  If so, this case doesn't appear to be handled  right now.
It's surprising that there aren't any columns other than EntityType that are common across all entities.  Perhaps there should be an EntityName column rather than separate columns ContractName, ContractLineName, and VariationName?  This would make the example query you describe in your question far simpler.
The data model  does not strictly enforce that the Variation contains logically consistent data.  It stores both a ContractId and a ContractLineId.  The foreign keys for these columns enforce that each is valid independently, but allow for a ContractLineId to be inserted that comes from the incorrect ContractId (that is, different than the ContractId for that ContractLineId in the ContractLine table).  One option to address this is to remove the ContractId column from the Variation table.