So I have some success fixing this. I am having to call RenderTexture.Display(), which fixed the inversion issue (for some reason). However, I could not draw the Render Texture directly to the Render Window, so I had to create a new Sprite and draw the RenderTexture.Texture to that, then draw the Sprite to the Render Window.
I know, complicated, but halfway working...
That is until I started noticing my FPS dropped from ~120 to ~16. Then things became very sluggish after a few minutes, and I noticed my game was increasing 1mb of memory every few seconds.
So, here is my current process on the light code (pseudo code):
Draw a new RenderTexture.
Clear the RenderTexture.
Loop through each tile for a light source.
When it finds one it creates a new Sprite of the light image.
Draws the RenderTexture.Draw(Sprite, New RenderStates(BlendMode.Add))
Disposes of that Sprite before continuing on to the next light source.
RenderTexture.Display()
Create new Sprite of Overlay.Texture
Sprite.Draw(RenderWindow, New RenderStates(BlendMode.Multiply))
RenderTexture.Dispose
Sprite.Dispose
Even removing the lights altogether and just drawing the render texture over the screen drops the FPS and causes the memory leaks. Bypassing the light code jumps my FPS back up to 120 and there is no leak in memory. This is the first time I have run into memory leak issues so I am lost on how to track them down since I am disposing of everything after it is used.