Regarding the Item Transform Bug... I'm tooling around with it trying to find the cause. I'm still in the setup phase, but I just had it happen to the item in the right hand - my Tempest became a Masamune (using two weapons). Will post more as I find out more.
EDIT: Looks like I figured it out. I haven't written a fix, but it's easy enough to do.
FF5's Main Battle Loop (MBL) can be found at C2/5872. It runs every tick, and checks various conditions. There are two variables we're interested in. The first $7C51, which is a flag that notes if a character has the Quick status. The other is $7C54, which is a flag that is set every four ticks, and for the purpose of this big handles HP Leak timing, among other things.
Part of the MBL is a check for Quick status being nullfied (C2/627B) - say by killing yourself off. This is where the bug is. This clears the flag correctly, but then calls JSR $24E4. The code is as follows:
C2/627B: AD 51 7C LDA $7C51 If Quick Flag not set, skip this part
C2/627E: F0 31 BEQ $62B1
C2/6280: A5 0E LDA $0E If Creature Number /= 7CB6, skip this
C2/6282: CD B6 7C CMP $7CB6
C2/6285: D0 2A BNE $62B1
C2/6287: BD 1A 20 LDA $201A,X If Zombie, Petrify, Dead...
C2/628A: 29 C2 AND #$C2
C2/628C: D0 1D BNE $62AB
C2/628E: BD 1B 20 LDA $201B,X ...Berserk, Charm, Paralyze, Sleep...
C2/6291: 29 78 AND #$78
C2/6293: D0 16 BNE $62AB
C2/6295: BD 1C 20 LDA $201C,X ...Stop...
C2/6298: 29 10 AND #$10
C2/629A: D0 0F BNE $62AB
C2/629C: BD 1D 20 LDA $201D,X ...Singing, Erased...
C2/629F: 29 84 AND #$84
C2/62A1: D0 08 BNE $62AB
C2/62A3: BD 06 20 LDA $2006,X ...or HP = 0...
C2/62A6: 1D 07 20 ORA $2007,X
C2/62A9: D0 06 BNE $62B1
C2/62AB: 9C 51 7C STZ $7C51 ...Clear Quick Flag
C2/62AE: 20 E4 24 JSR $24E4 ...and clear 3EAB array (#0C values)
C2/24E4: 7B TDC
C2/24E5: AA TAX
C2/24E6: 9E AB 3E STZ $3EAB,X
C2/24E9: E8 INX
C2/24EA: E0 0C 00 CPX #$000C
C2/24ED: D0 F7 BNE $24E6
C2/24EF: 60 RTS
See the bug?
24E4 overwrites the X register, which is supposed to be holding the character data offset. It never gets saved/restored. Oops.
So X is now #000C, and the MBL continues as normal until we get to the HP Leak Check (C2/6301).
C2/6301: BD 1D 20 LDA $201D,X If HP Leak...
C2/6304: 1D 73 20 ORA $2073,X
C2/6307: 29 08 AND #$08
C2/6309: F0 2C BEQ $6337
C2/630B: AD 54 7C LDA $7C54 ...and Tick Flag set...
C2/630E: F0 27 BEQ $6337
C2/6310: BD 1E 20 LDA $201E,X ...Exit if Jumping...
C2/6313: 29 10 AND #$10
C2/6315: D0 20 BNE $6337
C2/6317: C2 20 REP #$20
C2/6319: BD 06 20 LDA $2006,X If HP /= 0, HP--
C2/631C: F0 04 BEQ $6322
C2/631E: 3A DEC
C2/631F: 9D 06 20 STA $2006,X
C2/6322: 7B TDC
C2/6323: E2 20 SEP #$20
C2/6325: BD 1D 20 LDA $201D,X If Hidden, min HP = 1
C2/6328: 29 01 AND #$01
C2/632A: F0 0B BEQ $6337
C2/632C: BD 06 20 LDA $2006,X
C2/632F: 1D 07 20 ORA $2007,X
Since X is never restored, it's now reading data off of the first character's data. The first check (for HP Leak status) usually passes. However, this code is only run every four ticks - hence the seemingly random nature of the bug. Since it's now looking at weapon data, and since it's not usually going to be zero, it runs the DEX/STA, decrementing the weapon number.
The obvious fix is to make 24E4 PHX/PLX like it should have.