Why are only root project properties returned by Gradle properties task run on a multi-project project?

Correct.
The task is configured to ignore subproject tasks by the HelpTasksPlugin using an internal API

Then TaskNameResolver does not look at subprojects for the task if impliesSubProjects is true.