Oh, god... You're doing 10 OpenGL calls for each particle... Kill it with fire! Store the data in a ByteBuffer and upload it to a VBO each frame, and draw everything with glDrawArrays.
If you're still having a problem with the texture drifting then I suspect the problem is your texture coordinates. If you can't figure it out, post the code for the methods that generate the texture coordinates.
Yeah thats my next task for optimizing this code. But i dont know how to use VBO arrays. Im still looking for a tutorial specifically for 2D only...