Prevent AC bed from tripping breaker?

As far as I understand.
Breakers have a “time/current curve”, which means that basically, it is a “heater (resistor)” inside the breaker.
Which got “heated” from the current, and will trip on “overheat”.
It has an inertial, and it will pop after some time if there are 16A, and may not pop if there are 32A briefly.

Example 16A C breaker: https://www.proshop.nl/Componenten-voor-schakelkasten-en-kasten/Schneider-Electric-Acti9-ic60n-miniature-circuit-breaker-2p-16a-c-curve/2762802
Example spec for B: Tripping characteristics in miniature circuit breakers explained - Etigroup

So, I would expect that if C withstands more than B, and B should be popped at x2 current only after 32s.
I would expect that a 16A C curve breaker should pop with 32A, after at least 32s, or later.

You need to check the datasheet for your breaker to know that for sure.

Otherwise, yes, basically, PWM enables and disables the heater for some fraction of a second.

So, you normally should interpret that as 50% PWM, heater enabled 50% of the time.
But because of how heater control is implemented, basically, as long as heaters are enabled for more than 10ms in a row, they can all be enabled at the same time.
So, for the default 0.1s cycle time (100ms), if you control 4 heaters with different GPIO/Thermistors, from the same MCU:
At 40% (40ms/100ms) all 4 heaters will be enabled, at some point in time.
At 30% - 3 heaters and so on.

And there is also a limitation of SSR zero crossing, so they may not be enabled for a fraction of the time, or enabled for an additional fraction, as shown in the post above.
That means that actual/real power will vary, even if they are all fixed at 10%, for example.

So, you can limit the PWM with max_power.
As a last resort, you can look here: https://github.com/Klipper3d/klipper/pull/6837
It should allow for arbitrary power limits, over (for example) the sum power of all heaters.

Hope that explains something,
-Timofey