You are seeing this behavior because in string sort, 9 comes before 10 (i.e., it compares one character at a time starting with the left-most. So it picks character 9 which is greater than character 1).
You can convert it to numeric in a variety of ways and compare. What works best for your population of data - I am not sure. For example, one of these would work:MAX(CAST(REPLACE(LOTNUMBER,'-','') AS INT))
MAX(CAST(STUFF(LOTNUMBER,1,CHARINDEX('-',LOTNUMBER),'') AS INT))
If you have an opportunity to change the table schema, I would keep the receipt part and numeric part after the hyphen in two separate columns. Depending on how normalized you want to make it, you might even consider keeping them in separate tables. If you were to do either of those, you would not run into this problem. Querying, updating and answering various questions about the data becomes much more easier and much more efficient if you normalize it that way.