SQL Server Replace not returning expected result
ISNULL('','0')


Returns the first argument '' (as that is not null) so your question boils down to asking why 

SELECT REPLACE('','','0')


Doesn't return 0.

The documentation for REPLACE states


  string_pattern Is the substring to be found. string_pattern can be of
  a character or binary data type. string_pattern cannot be an empty
  string (''), and must not exceed the maximum number of bytes that fits
  on a page.


TSQL is not unusual in this respect.

In C# attempting "Some String".Replace("", "0") would give an error "String cannot be of zero length."

This is not surprising as in any string of text you could argue that there are infinitely many empty strings.

There could be 20 between the "T" and "h" at the start of this sentence. As they are zero length how could we tell?

For your actual use case you can use

SELECT CASE
         WHEN Threshold &lt;&gt; ''
           THEN CAST(Threshold AS DECIMAL(4, 2)) --Not null and not empty string
         ELSE 0
       END