If the mint destination is a smart-contract account (in opposed to an externally-owned account), then that smart contract must implement the ERC721Receiver interface, as you can see in the ERC721 contract's internal function _safeMint:
require(
_checkOnERC721Received(address(0), to, tokenId, data),
"ERC721: transfer to non ERC721Receiver implementer"
);
You can scroll further down that contract (which I have linked above), and see exactly how function _checkOnERC721Received is implemented.
And since the gnosis safe contract does not implement the ERC721Receiver interface, your attempt to mint to that contract reverts.
Well, safeMint is probably designated for your own protection, allowing you to safely assume that the contract which you're minting for is designated to receive those tokens and "handle them appropriately" (i.e., based on the intentional implementation of that contract).