How about something like this?

Don't draw your lighting by tinting your tile sprites.  Draw your __unlit__ tiles to a render target, then draw the tile lights to a second render target, representing each one as a grayscale rectangle covering the area of the tile.  To render the final scene, use a shader to combine the two render targets, darkening each pixel of the first according to the value of the second.

This will produce exactly what you have now.  That doesn't help you, so let's change it a bit.

Change the dimensions of your lightmap render target so that each _tile_ is represented by a single _pixel_, rather than a rectangular area.  When compositing the final scene, use a sampler state with linear filtering.  Otherwise leave everything else the same.

Assuming you've written your shader correctly the lightmap should be effectively "scaled up" during compositing.  This will get you a nice gradient effect for free via the graphics device's texture sampler.

You may also be able to cut out the shader and do this more simply with a 'darkening' BlendState, but I'd have to experiment with it before I could give you the specifics.