This is your custom range according to your log.
15200.00-20500.00,54.70-62.00,1.500,4.700,4.700,0.602,0.191,1.352,0,0,192,288,390,576
Those 2 values are huge. This is adding lots of unnecessary padding lines up and down. As a result your 240p mode is raising to 16.387 kHz. That mode should run around 15.7 kHz.
On the other hand, because your hfreq min is so low (15.2 kHz), your 224p mode is running at 15.31 kHz.
For this reason, your monitor is interpreting both modes as totally different. If take the resulting modeline in both of them, you'll see the vertical total is soo much different:
Switchres: [ 45] 2560x 224 @ 60 : ATI ADL timing "2560x224_60 15.418000KHz 59.992218Hz" 47.490000 2560 2632 2856 3080 224 233 236 257 -hsync -vsync
Switchres: [ 49] 2560x 240 @ 60 : ATI ADL timing "2560x240_60 16.500000KHz 60.000000Hz" 51.480000 2560 2640 2880 3120 240 250 253 275 -hsync -vsync
Now, this shouldn't be the case if you use a normal preset. If you change your -monitor option to arcade_15, you'll see how in both cases the vertical total is around 262. That's why I say they're the same mode. In a normal configuration, you'll expect to see those black bars on the 224p mode, which should be corrected manually.
This is how the actual hardware worked. E.g., Ghouls & Ghosts used to run at 15.7 kHz, not 15.31.
However, I see your point now. You intend to take advantage of your monitor's ability to auto adjust vertical size by creating a bunch of vertical total values that trigger this behaviour.