V-sync involves very time-sensitive operations (it must prepare a frame in 16ms, otherwise it drops a frame). It's possible that if the OS does some background work, it schedules work away from the game just long enough to drop a frame. I'm pretty sure it varies depending on the system configuration (OS, driver, background work, compositor mode, etc) which makes it hard to reproduce consistently.
FWIW other engines with native code have similar issues which are similarly hard to pin down (e.g. see this thread), so I don't think this is anything specific to HTML5 or browsers.