Bink uses the sound and a timer for frame progress, not the frame rate of the video (which varies all over the place on different machines, monitors, games, etc). So, when you have two clocks very close to each other they will drift in and out of phase slightly - as far I as I know, every codec works this same way.
You can completely take over frame advancing yourself by writing your own BinkWait and BinkShouldSkip functions that solely use the frame count to advance (you’ll have to handle when the game frame rate drops yourself, though). You’d have to rebuild the Bink plugin code, patch in your functions into the pBinkWait and pBinkShouldSkip function pointers, and then pipe through the game frame count somehow.