To the topic of "How to actually do correct motion blur":
Motion blur in ray tracers and path tracers are done commonly in 2 ways:
1.) "Hack" way - Using the special "animated transform" that describes the object movement over the frame. E.g. this solution is basically the same we're talking about in this topic, except that we blur at time we're creating image (e.g. no post-processing and neither bugs that are tied to it, like blurring background, etc.). Although this is a hack and only works for simple transformations (no deformations, etc.) - unlike the post processing solution. E.g. neither of these can actually compute correct motion blur. So is there any way to do it? ... -> 2.)
2.) Real way - Okay this will sound silly, but you actually do the stuff, you did on GPUs in the ages of accumulation buffers. Basically current frame is average of several frames. Now you will say that this will produce all artifacts for fast objects or quick camera rotation. The solution is - use sub-frames. You actually sample N sub-frames with defined sub-step before and after current frame (to get correct motion blur at current frame), where finding the N value is tricky. You need to select value high enough to have nice smooth motion blur on fast objects and low enough to actually compute N frames in some realistic time scale (e.g. doing this in few minutes or hours, depending on machines and time-scale available -> basically the almighty budget). Of course the N value can be computed or approximated.
Actually this 2. could be understood as discretization of what Reedbeta described (e.g. using "4D ray tracing"). Note that relativistic ray tracing is quite possible, just don't forgot variable time at your rays (though I'm not saying it's being actually used).
But unless you actually do some physics simulation (or high quality render, where motion blur is the main effect of it), you will probably stick to either "Hack" ray tracing solution or post processing solution.
#David Gallagher - It looks like something is wrong with your lerp value's third argument. Just from first look you're dividing in pixel shader and multiplying in compute shader. Note that it might be also somewhere else (but I think that this produces somewhat weird texture coordianates), I probably would have to see whole code of compute shader and think a bit more about it.