I bet i know the real reason for this. I had this issue also (transaction was sent to another account).
So, after i clicked "send", the GUI waited too long. Finally it said "sent". Then i checked blocks tab and found wrong recent blocks number, unconfirmed transactions and other signs of freezed java process. I instantly logged into the server and found several exceptions (not related to timeout) in the log. Few minutes later daemon died by not enough memory exception.
Instead of that useless CRC checks, it's better first to implement an additional check that the process itself is heathly and can be used to transfer money. Right, just few integrity checks before NXT transfer execution. It's Java. It's cross-platform. It's terrible and not really your friend.
GUI waits until all peers receive the transaction, the time heavily depends on pushThreshold value. Before sending a transaction NRS checks that its signature matches signed data, if recipient value was changed after signing the transaction wouldn't be confirmed.
Due to crash of java process, the number entered and transferred to the daemon by Javascript UI was corrupted (or mixed during interpretation) inside the very first stage of transfer process itself.