First I ran your code with
1. <cfif #Evaluate("2 - 1.52")# eq "0.48">true<Cfelse>false</cfif><br>
2. <cfif #Evaluate("3 - 2.52")# eq "0.48">true<Cfelse>false</cfif><br>
3. <cfif #Evaluate("4 - 3.52")# eq "0.48">true<Cfelse>false</cfif><br>
4. <cfif #Evaluate("5 - 4.52")# eq "0.48">true<Cfelse>false</cfif><br>
5. <cfif #Evaluate("6 - 5.52")# eq "0.48">true<Cfelse>false</cfif><br>
Then I rand it without string compare
1. <cfif Evaluate("2 - 1.52") eq 0.48>true<Cfelse>false</cfif><br>
2. <cfif Evaluate("3 - 2.52") eq 0.48>true<Cfelse>false</cfif><br>
3. <cfif Evaluate("4 - 3.52") eq 0.48>true<Cfelse>false</cfif><br>
4. <cfif Evaluate("5 - 4.52") eq 0.48>true<Cfelse>false</cfif><br>
5. <cfif Evaluate("6 - 5.52") eq 0.48>true<Cfelse>false</cfif><br>
I got

Next I just <cfoutput>
ed the valued
<cfoutput>
1. #Evaluate("2 - 1.52")#<br>
2. #Evaluate("3 - 2.52")#<br>
3. #Evaluate("4 - 3.52")#<br>
4. #Evaluate("5 - 4.52")#<br>
5. #Evaluate("6 - 5.52")#<br>
</cfoutput>

Which at first glance looks the same
But consider
<cfoutput>
1. #(2 - 1.52 - 0.48)#<br>
2. #(3 - 2.52 - 0.48)#<br>
3. #(4 - 3.52 - 0.48)#<br>
4. #(5 - 4.52 - 0.48)#<br>
5. #(6 - 5.52 - 0.48)#<br>
</cfoutput>

You are basically hitting a rounding issue. ...E-016 is a lot of digits to the left.
How I deal with these
If a ColdFusion variable is a number, just about anything can turn it into a floating point. You are using decimals, that is why it became a floating point. Floating points are (almost) always approximations. As such, you cannot do direct comparisons without side effects like this.
If you really had to do comparisons like this, multiply by 100 (an integer), and cast the values to integers and you should be in better shape.
Kind of OT
Some time is work with the Square's eCommerce API. All the money is measured in cents. It takes a while to get used to, but they do it to avoid problems like this.
Update based on Ageax suggestion
Consider
#Evaluate("5 - 4.52").toString()#
#PrecisionEvaluate(5 - 4.52).toString()#
This has results of
