The issue here is not "shadow" part, but indirect light (or any emissive source) data (in your case blue tint in shadow).
Natively this kind of data are stored in shadow catcher pass uncropped, so these pixels can be still composed as a "light" pixels. They are not visible on transparent bg, but since there is any bg they can be properly interpreted (react with bg pixels).
You can store uncropped data in OpenEXR format to continue in other image editor (if supports emissive data). See also how to composite shadow catcher properly.
If you still want transparent shadow catcher,
you can try to use Separate Color node in YUV color space...
- use Y (luminance) channel as Factor for Alpha Over
- use U and V channels to separate color of indirect light
Mix as follows ...
Mix it with bg in blender looks identical, mixing in Ph seems to be way darker for some reason ... maybe also shadow is not just a "black", but as already mentioned - mixing semi-transparent PNG with bg in post-process is something that never will be mixed correctly ... not only because of indirect light generated by object, but since there is not a bg, there is not a way to affect current object by bg's indirect color, etc.
Edit
If you are asking Why Shadow Catcher (SC) pass doesn't output transparency ... I'm just guessing - It just follows standards of any other pass. Any of them doesn't using alpha info, all passes are mixed by some blend type (multiply, screen, etc.). From this point of view it works as supposed to.
So if you are looking for a way to adjust shadow (and indirect light) casted on plane (that is set as SC) in separate layer, than I see two options.
One way is to render object ID pass so you can later use it as a mask in other apps (and you don't have to render twice as render layers). Or use any other masking options.
Second way is to use similar technique mentioned above ... just Y (luminance) is used to be a factor for Set Alpha node.
Saved Render as PNG ...
Render (without SC pass enabled)
Render with SC pass (enabled) run through node-tree above.
So yes it is some fiddling around with compositor, but for the reasons I described before Edit.