First, you don't declare Content Types via CAML. You declare them using XML. CAML is the Query-Language used to query lists.
If you declare Content Types via XML and deploy it by a Feature, the Content Type is created/updated on site collection level. However, if you use a Content Type in a List, then the list contains a child of that Content Type, which is actually a copy. If you update the site collection Content Type only by redeploying your XML in the Feature, the changes are NOT pushed down to inheriting (and therefore also not to children) Content Types.
You have 2 Options:
- Opening the ContentType in the Web Interface in the site collection Settings and click ok (this will push the current state of the ContentType down to its children)
- Adding a Eventreceiver to the deploying Feature, in which you grab the contentType from your sitecollection Content types and call ".Update(true)" on it (where "true" means pushing changes down to children).
You can do the latter also writing a PowerShell script.
There is also a way to do this using the FeatureUpgrade
mechanism. But this is quite complex and doesn't cover all scenarios for updating a ContentType