I'm wondering if the cue point time rounding is some byproduct of cuepoints creating a keyframe. You can't seek to a point in a video unless it has a keyframe embedded at that exact time. Otherwise it seeks to the nearest keyframe.
When making cuepoints using Adobe Media Encoder, it should be setting a keyframe at every cue point you enter. I've had Adobe Media Encoder fail to set the cuepoint exactly where I set it before. It doesn't happen when I encode using Sorenson Squeeze, or programmatically set the AS cuepoints though.
Is programmatically setting the AS cuepoints a possibility for you?
On the second part I mentioned, NetStream needs the client property set so it knows where to look for the public functions it expects to find. One of those functions is "onMetaData". When that function is fired you're given information about the video. One part of that data is all the cuepoints the video contains. You can loop through them, printing out their name and exact time they're set to. You should see what your cuepoints are set to.
// trace cue point name:time values
for (key in infoObject.cuePoints)
trace(infoObject.cuePoints[key]['name'] + ' = ' + infoObject.cuePoints[key]['time']);
It should trace something like this:
cuePointName1 = 0.142
someOtherCuePoint = 25.17
etcCuePoint = 38.259
Check to see what the cuepoints times actually are in code.
Here's more info on the subject: