$clusterTime for operational events

In our application, each document has a lastModifiedDate field that the application layer writes whenever a document is updated, but because this value comes from the app we sometimes see discrepancies due to factors like client clock drift, inconsistent updates, backfilled data, or delayed asynchronous writes. We are looking for a more authoritative way to know when an operation actually happened in MongoDB, and I believe that $clusterTime from change streams comes directly from the oplog and represents the logical commit time of the operation in the cluster. Is $clusterTime considered reliable for determining the true commit time of an operation, and are there any caveats where it might not reflect the real time an update was applied, such as with transactions or replication? Would you recommend using $clusterTime instead of an application-supplied field for CDC or auditing purposes?