how to resolve LM358's huge error as a current sense differential amplifier
LM358 is not a rail-to-rail opamp (neither input nor output). 

The input CM range includes the negative rail and the output can swing close to the negative rail under the correct conditions, however this configuration passes current If to the output, and if that current exceeds (typically) about 50uA then the output can no longer swing all that close to the negative rail. This is all in the datasheet.

Your choices are to use a better op-amp (but it still will have to sink current so it can never get all the way to the negative rail) or create a negative supply. Up to you.