This is not a reordering - it is related to how CF list processing works - empty elements are ignored / deleted.
Some of the List ~ string processing functions have an additional argument for changing this behavior (i.e., treat empty elements as an empty string), but the ReplaceList is not displayed.
, :
<cfset NewFilename = rereplace(Filename,"['##]","","all") />
<cfset NewFilename = replacelist(NewFilename,"&, ","and,-") />
replacelist( rereplace(filename,"['##]","","all") , "&, " , "and,-" )