How do you fix a sloped residual plot in OLS simple linear regression? I am building a simple OLS model with form Y = b0 + b1X
I have a residual plot that looks like this.  It seems like if we were to decrease the coefficient (b1) of the independent variable, we could almost fit it perfectly.

Yet that is what OLS returns.   I'd imagine the reason for this is because the conditional distribution of Y given X is not normal and similarly how outliers can pull the regression line away, extra data points in one area may be pulling the curve here.
What would be the solutions in such a scenario? Transformations?  Are there other models that may solve this?
Edit With Hexplot and smaller marker size:


 A: You should fit a LOESS smooth.
A "slanted" residual plot like this typically results from the influence of a few VERY influential and VERY leveraging observations (aka outliers). I might even venture to ask whether your plot axes have truncated any values with $X>1$. But there might be another explanation.
Another option is that in the very, very small range of $X$ (i.e. $x<0.1$), you have SUCH a density of observations, the trend is dominated by the local trend. Since the point cloud is so intense, and the range is so small, we can't be sure, but the marginal histograms show quite a large density of observations at this point. The corresponding residual plot, with center-filled observations, destroy our hope of visualizing the actual density of residuals within this range.
A LOESS smooth might show a "hockey-stick" shaped trendline closely following the model results in the range of $0<x<0.1$ and then a trend line that turns down somewhat. If the residual plot used non-filled points like in R, you might be able to see the same hockey-stick shape.
A: A comment requiring clarification:
The data in your residual plot looks more like a box instead of a cloud. Is there a reason to believe that data has been truncated? If so, when the data is truncated, what do you obtain?
The data in your residual plot has "inner clouds". Are there other factors that you have information about?
Answers to your questions
What would be the solutions in such a scenario?
Indeed, transformation help to spread the data distribution. Though, you would lose the linear relation.
An idea, to practically implement the density graph you have also shown, would be to slice the data in X at non-uniform intervals. For example, every interval contains n contiguous points. For each slice calculate the average, and use these new points for your linear regression. To determine a reasonable amount of point, plot the standard deviation of the residuals vs the amount of points used.
Are there other models that may solve this?
I would use a SVM with a circular kernel to create two groups, therefore separating the points at x=0 (group 0) from all others (group 1). From group 0 you establish b0 and the noise that can be expected from group 1 you can obtain your b1.
