The reason for this is line 89 (at the time of writing) in the package [email protected]/Shaders/Lit.shader
:
Blend[_SrcBlend][_DstBlend]
This says to use the same blending rules for the Alpha channel as are used for the RGB channels. So if you render low-opacity white over purple and get a blend of white and purple, you're also rendering low-opacity alpha over opaque alpha and getting a blend of low and full opacity: somewhere in the medium opacity range.
For most purposes that doesn't matter, since you're just rendering to screen and don't care what alpha values end up there. But when composing a transparent image in a render target, you do care.
A quick fix is to move the URP package from the YourProject/Library/PackageCache/
folder to YourProject/Packages/
- this gives you an editable version you can modify without your changes getting reverted to the package defaults.
Then go edit line 89 to:
Blend[_SrcBlend][_DstBlend], One One
This gives a separate blending rule for the alpha channel, which is to strictly add up alpha values rather than blending them. So if you had an opaque background, it stays opaque when you layer transparency on top of it.
Strictly speaking, to pre-compose content in a transparent render target to stamp elsewhere, you'll want to be using pre-multiplied alpha blending (see "Super-Power #2" at that link), but that's a deeper rabbit hole than I'll go into for this answer.