Good news, I've solved the problem. Just wanted to post the solution in case other beginners found themselves having the same troubles. One mistake that may lead to the symptoms I described above is to make your backbuffer the same size as your window. Since the window is actually larger than the screen that it draws (due to the menu bar, borders, etc), your drawn content will be stretched, leading to inaccuracies in the drawing. Increase the size of your backbuffer by the size of the window's edges, borders, etc that you will be drawing it in, and the problem disappears. For example, I used the code:
int gnBackBufferWidth = gnWindowWidth + 16;
int gnBackBufferHeight = gnWindowHeight + 40;
to solve the problem. I assume that, depending on your chosen window style (with/out borders, with/out system menu, etc) your values will differ. If that doesn't work, try some of the suggestions above.
Thanks for everyone who responded, I appreciate it.