In my case, I created a workflow that needs to set a 'Document Number', something other than just using ID, this one uses a list to keep track of the latest number. As a good practice, the definitions were setup as Content Types (in my case, 3 - 1 core and 2 that inherit from the core).
The need here is that a) the Document Number needs to be assigned by the workflow, b) visible in the List/Library Views and c) it isn't supposed to show up when adding/editing an item (i.e. so user cannot change).
So, one might think to simply set the field/column to Hidden up front and here's where the problem comes in.
If you set a column as Hidden, it does indeed appear in the content type but when the content type is added to a list/library, surprise! The column is not added, thus not available in the views - defeating the entire purpose.
The solution is a sloppy workaround but does work (you just need to document this!).
BEFORE adding the content type to the list/library, leave the field as Optional - this includes any content types that inherit from it.
NEXT add the content type(s) to the list/library - the column will appear. Set any views that you want, particularly those that need to display the column.
AFTERWARDS, go back to the Content Type(s) and set the column as hidden.
Once this is done, you will be able to use the column as you would have expected in the first place.
This problem has be a long standing one (past 4 years or more).
An extensive post on this (from back in 2013!):