That's not screen tearing I'm afraid, what's happening is you're scaling by a non integer number.
For example if you scaling your images to exact whole numbers, (2, 3, 4, etc.) you get things looking correct. If your scaling isn't an integer you'll get inconsistent scaling across the pixels when using nearest-neighbour filtering.
Another way to explain would be, imagine scaling an image that is 256 pixels wide to be 510 pixels wide, since 256 does not divide into 510 exactly (it does into 512) what will happen is 2 vertical lines of pixels will only be drawn 1 pixel wide while the other 254 lines will be 2 and so you'll get this kind of thing happening. Same thing happens with scaling vertically as well.
Here're a few suggestions to help avoid this, with 'but's on each:
- User linear filtering instead of nearest-neighbour. But this will make everything look blurry and lose a lot of the pixel-art style.
- Strictly control your image scaling to ensure only integer scaling is processed. But this won't work if you want to be able to smoothly zoom in and out of your scene and different resolutions may have different visible areas.
- Draw everything to a fixed size using a RenderTarget2D and use a shader that super-samples that to your final resolution taking the scale into consideration and blending where it needs to to avoid the inconsistent pixel sizes. But, this one is a bit advanced and you'd need to either know your way around shaders or find someone who could write it for you. In addition, it may lose some of the pixel art style, although not to the extent of the first option.
Other people may have better suggestions.