Yep, this seems to be the problem iv'e been coming up against. Seems the way I thought it was implemented isn't quite right. I initially thought I could compare the positions of two frames at each pixel, but as you say, doing this means the difference between frames would be greatest at the boundry of a moving object and wouldn't give a per object velocity.
What I actually need to do is get the velocity of each vertex when the objects are initially drawn. However I can't think of a feasible way to do this without some major editing of vertex shaders and the like. So an accumulation buffer motion blur will have to do. Position information will still be available for other post process usage though.
Bookmarks