I'm a bit surprised it works. I see two problems: You transform your points to homogenous clip space already in the vertex shader. Then you apply again the world transformation. This is wrong. Always be careful with your spaces. It helps to use explicitly named temp variables (or even semantics) to point out the difference.
Also, when expanding in clip space, you need to adjust that scale value for the correct aspect ratio. If you expand x and y by the same scale, your particles will get the aspect ratio of your rendertarget.