Ich habe mich vielleicht etwas kompliziert ausgedrückt, deshalb nochmal dieser "Nachklapp" mit einem Beispiel.
Wenn Du das Programm von $0350-$FFFF packst und dann wieder in diesen Bereich entpackst, dann sollte bei allen Packern die das können dasselbe vor dem packen im Speicher stehen wie auch nach dem entpacken. Das kannst Du natürlich auch gerne prüfen, Fehler halte ich hier für sehr unwahrscheinlich.
Es ist wahrscheinlicher, dass der Fehler entsteht, weil das Programm gewisse Werte oder auch Code im beim packen ausgelassenen Speicherbereich $0000-$034F erwartet.
Wahrscheinlichstes Beispiel hierbei: eine uninitialisierte Variable. Nimm an das Programm erwartet den Wert 0 in der Speicheradresse $00FE und funktioniert auch nur korrekt, wenn da auch wirklich die 0 drin steht. Der Entpacker verwendet aber genau diese Speicheradresse $00FE für irgendwelche Zähler und nach dem entpacken steht da nicht 0 drin sondern 9. Dann läuft das Programm nicht mehr korrekt. Adressen und Werte sind nur zur Verdeutlichung und können real natürlich anders sein.
Du könntest also pfüfen, welche Werte im ausgelassenen Bereich $0000-$034F ERST gelesen werden bevor sie GESCHRIEBEN werden (den Stack vielleicht erst mal außen vor lassen).
Ist wahrscheinlich also eher ein Problem beim Programm selbst als ein Problem bei den Packern.