The colorimetric table seems to be pretty well behaved:
icclu -ff -ir PX720_optimized.icm
0.000000 0.000000 0.000000 [RGB] -> Lut -> 4.248098 -0.397643 -5.411831 [Lab]
icclu -fb -ir PX720_optimized.icm
0.000000 0.000000 0.000000 [Lab] -> Lut -> 0.102383 0.019198 0.000000 [RGB]
icclu -ff -ir PX720_optimized.icm
0.102383 0.019198 0.000000 [RGB] -> Lut -> 5.680156 0.202720 -3.258243 [Lab]
That's an increase in L* of 1.44 for an improvement in neutrality of around dE 2.2.
Notice how the red colorimetric output curve ends at a value of 26?
You get what you ask for - after all, that's the whole point of profiling. The RGB 0,0,0 black is very blue, so a more neutral black (closer to a*b* 0,0) adds red. The colorimetric table is doing what is expected of it.
Even though the max. black value is indicated as L=4.3, this shifts to L=10 with BPC enabled (measured and confirmed)
and I do not understand why.
BPC is not ICC. If you choose to use it, you get what you get. If you don't like what you get, then don't use it.
You can try and figure out exactly what it is doing by looking through Adobe's BPC document, but the algorithm isn't really specified to an exact degree, and I can't tell why you see the effect you see just reading through it. Marti Maria wrote a paper on
his efforts to duplicate the algorithm, perhaps that would provide some insight.
I guess it's either making a mess of guessing the source black or making a mess of guessing the destination black. Either way, it's not working very well.
Also interesting: the perceptual table has a deeper black (L=3) and ab values closer to the paper white point. Do you know why this is happening?
It's not clear how you created the perceptual table (i.e. what source gamut and intent options you used),
but assuming you used something like sRGB or AdobeRGB as the source and the default intent, then yes, of course you get a better black. It's a perceptual mapping, so is free to manipulate the neutral axis mapping, including mapping L* 0 input to something closest to the lowest L* point, and then bending the axis back towards neutral as the L* increases:
icclu -fb -ip PX720_optimized.icm, icclu -ff -ir PX720_optimized.icm
0.000000 0.000000 0.000000 [Lab] -> 0.030498 0.018838 0.041062 [RGB] -> 3.540762 0.259697 -5.099384 [Lab]
5.000000 0.000000 0.000000 [Lab] -> 0.213447 0.051423 0.103475 [RGB] -> 9.716845 -0.316834 -4.072148 [Lab]
10.000000 0.000000 0.000000 [Lab] -> 0.309948 0.098863 0.146849 [RGB] -> 14.201698 -0.035355 -2.925981 [Lab]
20.000000 0.000000 0.000000 [Lab] -> 0.437416 0.235200 0.275797 [RGB] -> 23.199016 -0.009501 -1.762555 [Lab]
That's why I recommend creating a perceptual table for your source space (or better, a device link) if you want a nice color reproduction.