Here is the randomization fixed.
You'll need the RandomArray plugin.
Briefly, set the Random array size to the number of frames. I've set it to 10, as two of your last frames a duplicates, and it's clearer to see there are no duplicate frames when there aren't any to begin with.
On your timer event, rescramble the array, and copy this to a normal Array. Cycle through every active monster to find it's frame number in the Array and remove it. You then have an Array of frame numbers that are unique to this cycle.
In the selection event, set the frame to the first one in the array and then delete that same entry so that the Array is again unique for the next monster in this cycle.
The other change was to add an Active flag, to know which sprites are active and should be checked for duplicates, ignoring all others.