I think the whole problem gets simpler if you switch from rectangular coordinates to polar coordinates (radius and angle). Then a circular random distribution centered around the comp center becomes something like this:
c = [thisComp.width,thisComp.height]/2; // center
rMax = 500; // max radius
seedRandom(index,true);
a = random(Math.PI*2);
r = random(rMax);
x = r*Math.cos(a);
y = r*Math.sin(a);
c + [x,y]
It gets more complicated if you have a rectangular exclusion zone in the center of the field, but by using a little trig, you can avoid the while loop that can hang AE:
c = [thisComp.width,thisComp.height]/2; // center
w = 400; // width of rectangular exclusion area
h = 300; // height of rectangular exclusion area
rMax = 500; // max radius (must be big enough to enclose the rectangle)
seedRandom(index,true);
a = random(Math.PI/2);
aMid = Math.atan2(h/2,w/2);
if (a < aMid){
rMin = (w/2)/Math.cos(a);
}else{
rMin = (h/2)/Math.cos(Math.PI/2 - a);
}
r = random(rMin,rMax);
x = r*Math.cos(a);
y = r*Math.sin(a);
n = Math.floor(random(4));
if (n == 1){
x = -x;
}else if (n == 2){
x = -x;
y = -y;
}else if (n == 3){
y = -y;
}
c + [x,y]