The contains and contained by relationships are counted as significant even if you do not want this behaviour (CS200378). This means that a requirement is treated as significantly modified even if it is just moved within the document.
If you wish to perform triggers when only the selected significant fields are modified (e.g. setting a change status flag) then you need to know which fields are selected as significant. The events API has an undocumented function, getSignificantFieldBeans() which returrns the significant fields for the type.
Officially support and document this function in the API so that other customers can make use of it in their triggers.