So, if I understand you correctly, you want the unit to remain the same unit, but change its portrait into something else. As far as I'm concerned this can be achieved by changing the unit's skin, but you will still need another unit with a different portrait to use its skin, so to speak.
I'm gonna be honest, I couldn't find an easy-clicky way of finding a unit's skin ID, but you can find it out like so:
-
Events
-

Player - Player 1 (Red) types a chat message containing skin as An exact match
-
Actions
-

Game - Display to (All players) the text: (String((Skin ID of Knight 0001 <gen>)))
However, it'll give you a rather large integer, such as 1751871081 for a Knight, which you will not be able to set manually using the Unit - Set Unit Skin action, therefore you want to feed it using the Unit - Skin action, the one I used to get it to display up there.
Without better ideas, I guess you can spawn your secondary unit for just as long as you need its skin ID so you can change your primary one, like so:
-
Events
-

Your event
-
Conditions
-

Your condition
-
Actions
-

Set VariableSet pos = (Center of (Playable map area))
-

Unit - Create 1 YOUR_SECONDARY_UNIT for Neutral Hostile at pos facing Default building facing degrees
-

Unit - Set Unit Skin of YOUR_PRIMARY_UNIT to (Skin ID of (Last created unit))
-

Unit - Remove (Last created unit) from the game
-

Custom script: call RemoveLocation(udg_pos)
If this is not what you were looking for, I misunderstood you.