I found that missing surface that wasn't getting disposed too. It was because of this line:
m_d2dRenderTarget = RenderTarget.FromDXGI(d2dFactory, m_sharedTexture10.AsSurface(), d2d_rtp);
This Texture2D got disposed, but the d2dRenderTarget still had a reference to its surface so the surface did not. I added a new member variable to hold a reference to this surface, and then I added a line in the Dispose() function to dispose this new variable. Now there are 0 live objects.
Thanks again for all the help! It's so great to have it working finally after a couple days! lol