В сухом остатке получается, что:
* COW у Qt работает как документированно
* можно сломать контейнеры использующие COW через mutable
* реализовать "надежный" контейнер с COW для любых данных нельзя, см. предыдущий пункт
* если не нравятся Qt-шные контейнеры с COW, то в большинстве случаев можно использовать любые другие даже Qt-шными сигналами и слотами.