When writing to the Pokémon's data, you risk changing something which should have an effect in the checksum. Without updating this checksum, the Pokémon will instantly become a Bad Egg.
My way of doing the formes avoids this potential problem by not writing to that area of data. It simply keeps the same Pokemon, calling the stat recalculator if necessary. It also takes much less space in terms of seperate data.
The code for gender differences is mixed in with the formes, since I reasoned that they were technically a variation on formes. Like Arceus however, nothing is directly stored to the Pokémon data which determines its gender, it is simply calculated on the fly as necessary. The Sprites are missing however.
Actually, the EGG is sprite 412. But that's nitpicking. To answer your question, I inserted a little bit of extra code at the sprite getting locations, with checks against the Sprite number and the Species ID (both are in the registers at this stage in FR). Simply, If it's Unown, I load a different table offset, and subtract the necessary number of sprites to make it fit, and if it's the EGG sprite ID, I check if the Pokémon the sprite request came from is an egg. Even if it is a Burmy AND an EGG, it will automatically display the EGG sprite until it hatches.
More complicated than necessary, but that's what happens when you forget that the Unown sprites (and EGG sprites) follow directly on from the "Normal" sprites.
EDITED TO ADD: I managed to get formes to recalculate stats when activated based on the current forme.