Due to a flaw in processnewtransaction in wallet2.cpp, if the tx pubkey is present multiple times, it will decode outputs correctly as many times, and add up the amounts. This means the final amount reported by show_transfers will be the actual amount received multiplied by the number of duplicate tx pubkeys present in the transaction extra field.
Probably does not work if the recipient expects an integrated address, since someone stripping the payment id and contacting support would be unlikely, so priming the exchange to be suspicious.
This was found by investigating a bug report: https://github.com/monero-project/monero/issues/3983.
A simple patch fixes this: keeping track of pubkeys already scanned for, and skipping those that were already scanned.