Probably because you got lucky and only had small values of Freespace.
Try the function manually and you'll find that
Convert(Decimal(2,1), 9.94)
will produce 9.9, but
Convert(Decimal(2,1), 9.95)
will produce as overflow error. Allow a larger value
Convert(Decimal(3,1), 9.95)
and the result is 10.0.
Is there a particular reason why you want to restrict display output to values < 10? If you're just wanting to display the value with one decimal place, consider replacing the size parameter (2 in your example) with something much larger than you're ever likely to see. I believe the default is Decimal(18,0), so why not just specify Decimal(18,1) to get the one decimal you seem to be after? That would cover you up to 99,999,999,999,999,999.94.