This can be a fairly common problem when syncing video to audio perfectly. It has to do with the audio not being recorded in the same format as the video. Video records in timecode format, and audio calculates in seconds. Depending on how the video is natively recorded, there can be a dropped frame or 29.97 frames a second vs a straight 30. Over time the 29.97 can slowly drop a full second count (audio) out of sync. Hopefully that made sense, it can get a bit complicated.
There are a couple ways I have found to fix this problem..
1. Sync two clips of the full vid to the audio. One at the beginning of the song, and one at the end.
They should meet up in the middle, in sync the whole way through. Granted there will be a
jump cut at that split, but you can just cut to another shot.
2. Calculate how many seconds the video is off with the song at the end, and slow down the entire
video by a small percentage.
Once again hope that helps, good luck!