The purpose of a full node is to unilaterally verify that all rules of the Bitcoin protocol have been followed, and to synchronize a node’s state with the global network’s state. Keeping available the entire Unspent Transaction Output set (UTXO set) is both a necessity to that end as well as the end itself: more than anything else, the UTXO set represents the current state of the network.
While pruned nodes can discard blockchain data after processing it, as established in Why is a bitcoin node pruned to 550MB taking up 10GB+?, the chainstate
database stores the UTXO set which cannot be pruned for a full node to fulfill its purpose. Given that your Bitcoin directory appears to be roughly the expected size for a pruned node, and you state that all of the mentioned nodes are pruned, I suspect that the answer is: you cannot further reduce the storage footprint of your pruned nodes without impeding their function. As to why they have different sizes, I suspect that the varying block intervals translate to different minima on how many blocks are retained, and the networks obviously differ in the size of their UTXO sets.
If you do not actually need a fullnode you may be able to replace your fullnodes with third-party data sources or SPV clients, but if you do need the functionality of a fullnode, the reported numbers appear to be the expected minima.