Its been aaages since I've used maya dynamics in anger, but there's a few things I think I remember:
-the random emission thing is a 'feature', once you make an object a geometry emitter, it'll emit from the entire surface randomly by design. The occasional behaviour of particles only emitting from vertices is a mis-feature, when the emission type is set to point.
-particles and emitters understand very little of the geometry they emit from. you get parentU and parentV, but thats about it. you could maybe hijack a samplerinfo node, and use mel calls from within your particle expression to query things like the closest edge to a worldspace point, but obviously thats going to get incredibly slow very quickly
-you might be able to get this info very quickly via SOuP, I haven't tried
-my uv suggestion was because last i checked there's an almost instant method to take every face of a shape and map each face into the 0-1 uv square. from that point it'd be easy to query the parentU parentV per particle attribute as i suggested.
-yet another cheaty option would be to convert all edges to curves, then emit from curves, again querying the parentU to make sure its at 0.5. i'm positive there's a way to do that internally these days (if not from the convert menu, then via paintfx, or toon, or bonus tools), there'd be a creative crash script floating around I'm sure.