Missing puff of smoke frame
The routine at 39958 is responsible for animating the puff of smoke. The instruction at 39972 initialises a loop counter to five with the intention of iterating over all puff of smoke graphic frames at 31377. There are, however, six frames, so the sixth is never drawn. It is possible that this bug is related to the fact that in Spellbound (which uses the same puff of smoke graphics), the routine that draws all six frames uses a somewhat different mechanism to do so; the Spellbound drawing method uses a loop counter initialised to five to draw six frames.
To fix:
POKE 39973,6
Off-White doesn't kill on taking an object
When Magic Knight takes an object from a character, that character's "take an object" routine is executed. The start addresses of these routines are listed in a table at 42069, and Off-White's routine is located at 42085. All Off-White's routine does, however, is to check whether the object being taken is an egg, and if so have Off-White refuse to hand it over. Off-White tends to be rather trigger-happy in other circumstances and so should be here too.
To fix, set Off-White's "take an object" routine to be 42244:
POKE 42069,4
POKE 42070,165
Off-White and Grunter don't kill on giving an object
When Magic Knight gives an object to a character, that character's "give an object" routine is executed. The start addresses of these routines are listed in a table at 42413; Off-White's routine is located at 42429 and Grunter's routine is located at 42488.
All Grunter's routine does is to transfer the object in question to Magic Knight's inventory. As Grunter readily kills Magic Knight if he tries to take an object, the beast should also kill when an object is given.
Off-White's routine checks whether the object being given is the Brass Ankh, and if so it is refused. A jump is then made to 42437 to a non-existent code address. The result of this is that the game will freeze if Magic Knight attempts to give an object to his evil counterpart. While Off-White's refusal of the ankh is consistent with his dark nature, he should really kill Magic Knight instead.
To fix Grunter's "give an object" routine so that he kills Magic Knight, it should be set to 42244 or 45723:
POKE 42427,4
POKE 42428,165

To fix Off-White's "give an object" routine so that he kills Magic Knight, it should also be set to 42244 or 45723:
POKE 42413,4
POKE 42414,165
2 × 2 block drawing
The routine at 41271 draws 2 × 2 blocks as defined in the table at 49794. These definitions include a bitmap that determines which of the four character cells spanned by the block have a terrain interaction parameter applied. The routine functions correctly up to 41398, by which point the upper two cells have had their terrain interaction parameters correctly applied. The instructions from 41398 are intended to advance the terrain interaction data pointer down one character row and paint the lower two cells, however the instructions are in the wrong order. The instructions at 41398 - 41402 load B with the terrain interaction painting bitmap and A with the terrain interaction parameter to apply. Then the instructions at 41405 - 41411 advance the terrain interaction data pointer by 32 bytes by adding 32 in BC. When BC is loaded with 32 at 41408, the terrain interaction painting bitmap value is lost, and therefore from 41412 onwards the value in B is zero.
In order to fix this bug, the two blocks of code, 41398 - 41402 inclusive, and 41405 - 41411 inclusive, should be switched in position.
Spelling and punctuation
There are a number of spelling and punctuation issues:
For reasons of consistency, "disquise" is used in place of "disguise" throughout this disassembly.
Text never shown
The byte at 23714 determines the index of the current Scroll substring from the list of strings at 54902. This index is capped at 7, however there is an eighth (and therefore unused) substring at 55139.