When you call m_pSplitter->SetTimePosition(time) the splitter moves tothe nearest I frame previous to the time you specified. This is done because decoder can start decoding from I frame only. If you want to get a frame with the timestamp exactly you specified, you should just skip frames after decoder before rendering.
Really I don't quite understand what you're doing.
You should use Splitter to get an encoded frame from the stream (it has already DataReader inside), then you should pass this frame to Decoder (because it works by frames) and then you should pass decoded frame to the Renderer. For reposition you should first use Solitter methods as I said above. You may study umc samples to understan how it works.