I assume that a Particle.function is never executed while loop() is being executed.
That depends on what happens inside
loop() and whether you are using
SYSTEM_THREAD(ENABLED) or not.
delay() might open a door for cloud functions during
Cloud functions registered with Particle.function() and event handlers registered with Particle.subscribe() continue to execute on the application thread in between calls to loop(), or when Particle.process() or delay() is called. A long running cloud function will block the application loop (since it is application code) but not the system code, so cloud connectivity is maintained.
the application continues to execute during listening mode
the application continues to execute during OTA updates