If you decide to go the illusion route of letting a PC 'possess' the monster, here's a few thoughts on how you coudl do it without a custom polymorph option:
1. FadeToBlack on the PC to keep the changes in the next steps hidden from the PC
2. ActionJumpToObject(oMonster, oPC) and SetFacing(GetFacing(oMonster) on the PC to move the PC to the monster's position
3. Save the appearance of the PC, and the portait ID of the PC, on the PC using SetLocalInt
4. Use SetCreatureApperanceType(GetAppearanceType(oMonster), oPC) on the PC to change them to the appearance of the monster
5. Use SetPortraitID(GetPortraitID(oMonster), oPC) to give the PC the portrait of the monster
6. ActionUnequip any weapons/cloaks/armor/helms that could be visible if the monster appearance to which they have changed displays any (or unequip all items if appropriate).
6a. If its an issue/concern, put something in the module OnEquip event that automatically unequips any items a PC tries to equip while they have the moster appearance
7. Custscene Invisible the monster (do not destroy) so that it can be jumped to, or have CopyObject used on it, to wherever the PC ends up when they 'unpossess' the monster. Probably set it to plot as well. Use the apperance and portrait ints on teh PC to revert back to the original form whenever that occurs
8. FadeFromBlack on the PC. They should see 'themself' as the monster
It's definitely not perfect though, and there are a number of things that could be refined further - like should the 'monster' be able to use items, the voice set of the monster being that of the PC, the race of the monster being that of the PC, if it's a standard monster, none of the monster abilities/stats/feats will be given to the PC, etc, etc, etc. But if it's meant to be a short possession to do a specific task, this might work for you.