As noted earlier in the comments, as of 2.2.0 libddcutil no longer supports watching for DPMS changes. The ddcutildetector.cpp line ddca_start_watch_displays(DDCA_Display_Event_Class(DDCA_EVENT_CLASS_DPMS));writes message "Watching for DPMS state changes unimplemented" to the system log and fails with status code DDCRC_ARG. Further detail on the failure can be obtained using ddca_get_error_detail(). The bottom line is line is that watching for display changes is not started.
The problem with powerdevil safely exiting when kwin_wayland crashes was addressed in ddcutil 2.2.1. The problem was that libddcutil terminated using a call to exit() in this situation, causing powerdevil to terminate with status success and not being restarted. libddcutil is now terminated using a call to __assert_fail(), causing powerdevil to terminate with status failure and, at least as far as my testing showed, being automatically restarted. If this is not the case I would appreciate a counterexample.
Both these changes are documented in file CHANGELOG.md in the source tree and the in www.ddcutil.com pages Shared Library Changes for Release 2.2.0 and Shared Library Changes for Release 2.2.1.