This is my understanding of the behavior of non-template characters in the picture clause, consistent from the days of Clipper till now in (x)Harbour.
When a picture clause containing non-template characters is used to transform a numeric value, the non-template characters are inserted. But when a character value is transformed, the non-template characters are substituted unless '@R ' mask is used.
Transform( "12345678901", "999-999-999" ) --> "123-567-901"
Transform( "123456789", "@R 999-999-999" ) --> "123-456-789"
Transform( 123456789, "999-999-999" ) --> "123-456-789"
Transform( 123456789, "@R 999-999-999" ) --> "123-456-789"
The behavior reported by Mr. EMG is correct and that is what should be expected. I do not think there is any bug either in FWH or in (x)Harbour.
If I am still missing anything I am interested to know.