Depois de lutar com isso nas últimas horas, finalmente consigo fazê-lo funcionar dentro do meu projeto. A coisa que eu fiz foi isso:
Regra de controle
@OneToMany(fetch = FetchType.LAZY, mappedBy = "controlRuleAttribPK.controlRuleId")
@Cascade(CascadeType.ALL)
private List<ControlRuleAttrib> controlRuleAttribs;
Basicamente apontando que a coleção deve usar controlRuleId da chave primária composta. Até agora está funcionando muito bem!