They never both try to generate at the same place. There is a function(StructureFeature.isFeatureChunk()) that only allows fortresses to spawn in 40% of the regions and bastion in other 60%. So either a fortress tries to generate or a bastion. This is working as intended.
this bug is very old and works with any items, i reproduced it in 1.14.4
It does not happen until you use any bugs like the bug with the wet sponge or other bugs that allow you to cancel block updates
Water level in cauldron and compost level in the composter are not saved in the nbt because these blocks are not tile entities so they does not have any nbt data
Working pig spawners spawn for a different reason, this is not the same bug, they spawn because when a buried tresure spawns, it hides itself by copying the blockstate without nbt data it replaced to it's sides that are air or water, so here i think the bug is that it only copies the blockstate and not the nbt data, and the spawners should be cave spider spawners