The problem, is there is no problem. It looks like there was two issues I had, which contributed to the error. So this is a bit of speculation really.
The first was that I had built bitcoind on the Mac (8.9+) and somehow the blockchain got somehow corrupted or something caused an issue. So I fixed this by running bitcoind -reindex
The second possible issue was that mempool had either already had the transaction and couldn't/hadn't resent it.
Either way, there is a (throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "TX rejected"); // TODO: report validation state in rpcrawtransaction.cpp), when validating the transaction and my c++ is not good enough to help report the validation state.
But if anyone else suggests how I can approach it then I would gladly!