Edit 2:
Now for a more serious attempt at something efficient..
findPoints = Compile[{{n, _Integer}, {low, _Real}, {high, _Real}, {minD, _Real}}, Block[{data = RandomReal[{low, high}, {1, 2}], k = 1, rv, temp}, While[k < n, rv = RandomReal[{low, high}, 2]; temp = Transpose[Transpose[data] - rv]; If[Min[Sqrt[(#.#)] & /@ temp] > minD, data = Join[data, {rv}]; k++; ]; ]; data ] ]; And to test it for benchmarking...
npts = 350; minD = 3; low = 0; high = 100; AbsoluteTiming[pts = findPoints[npts, low, high, minD];] ==> {0.0312004, Null} Check that the min distance is less than the threshold.
Min[ MapThread[ EuclideanDistance, {pts, Nearest[pts][#, 2][[-1]] & /@ pts}]] > minD ==> True Check that I generated the correct number of points..
Length[pts] == npts ==> True 
