While implementation of persistent schedules and the recommended approach for Liferay Cloud is outside of my wheelhouse, I can provide resources the help answer question 1 and 2.
Why are these jobs running in MEMORY_CLUSTERED mode even though we are registering background tasks?
MEMORY_CLUSTERED jobs are the default… for Liferay schedulers.
Possibly meaning unless you explicitly request PERSISTED, the Quartz library and Liferay will choose MEMORY_CLUSTERED regardless of how it’s registered. For more info see: How to diagnose and recover Liferay cluster.
How can we configure these background tasks (or schedulers) to run in persistent mode so they survive node switches and restarts?
Liferay Source Code outlines the three types of storage, this is how you can configure PERSISTED.
Coupling this with the instructions noted in the portal.properties, this should give you insight on how to configure the scheduler to run in PERSISTED mode.