Basically as far as I can tell something like this might work for you
To Spawn the Monster at a random location
Place a monster in the level. Call it monster 1
Set it up so Spawn at start is set to No
Immobile is set to No
Always Active is Yes
Give it the Monster fpi in its main (Il discuss this later)
Place it at one of the places you would like the monster to spawn
Do this as many times as you like (8 for example) each time changing the number at the end of the monsters name so you end up with something like
Monster 1 in one place
Monster 2 somewhere else
Monster 3 somewhere else else. etc etc
so you have your 8 monsters on the map, none of which are set to spawn at the start, they are all waiting to be told to spawn at a specific point
So what you need is a 'control script'. This is a script that is used to control which monster spawns and when.
This is usually placed in either a trigger zone (if you want control over the spawning based on location) but I usually put it in the main of a Dynamic entity, which i set to immobile with no physics but always active, and place outside of the level.
Now to control which monster spawns randomly you can use the random=x command.
This is true when a random number is equal to x
So somewhere in the control script will be something like this
:state=10,random=1:setifused=Monster 1, activateifused=1,state=20
:state=10,random=2:setifused=Monster 2, activateifused=1,state=20
etc etc all the way up to Monster 8
What happens then is that when you send the control script to state 10, it randomly selects a number, so when random=2 it sets the ifused field of the control script to the name of the corresponding monster, it then activates the ifused field spawning that monster into the level and then takes itself out of state 10 so it doesnt repeat this process making sure only 1 monster is spawned.
As I mentioned in a different thread its a good idea to have a variable going along with this like globalvar=Monster, then everytime it spawns a monster, set the variable to the corresponding monsters name, so the game knows theres already a monster spawned in and prior to attempting to spawn a monster have a check to make sure this variable is at 0
Then code the Monsters AI script however you want, but when its destroyed have its script set that global Monster variable back to 0 to allow the control script to spawn another monster elsewhere.
As for avoiding the light. Depends largely how you want it to 'look'.
I would probably place an invisible entity with collision off at the center of the light source (or thinking about it modify the lights fpi, or make the light dynamic, name it something unique light 'Lightavoid1', then in the monsters fpi, have it perform a check based on targetname=, by setting the targets name and using AItargetdistfurther=x, where in this case x would be the light range defined in the editor.)
Not sure if any of this would work, but sitting here going through it in a logical progression with Ched's complete syntax guide next to me there seems to be no reason why this effect cant be achieved provided your willing to put the effort into coding all the fpis
smoke em if you got em