Nie znam tego API, ale czy parametrem konstruktora TOICFiscalPrinter.Create jest zwyczajny AOwner?
Jeśli tak, to zamiast podawać w nim nil, możesz podać jakiegokolwiek rodzica (formularz, albo i nawet Application) i taka instancja zostanie automatycznie zwolniona w destruktorze ownera, więc nie tylko zostanie wywołana raz, ale i nie będziesz musiał sam tego robić. Nie jestem zwolennikiem takich automatów (wolę sam alokować i dealokować), ale rób jak Ci wygodniej.
Przy czym zwróciłbym uwagę na to co napisał @Drunky, czyli na wywołanie metody Close przed Free. Choć obstawiam, że destruktor tej klasy sam woła Close, jeśli drukarka jest ”otwarta” w trakcie niszczenia jej instancji.
Natomiast aby znaleźć miejsce wystąpienia błędu AV, odpal aplikację pod debuggerem, do tego skorzystaj z narzędzi do analizowania pamięci, które oferuje Delphi. Gdzieś w kodzie jest odwołanie albo do znilowanego pointera, albo do nieprzydzielonej pamięci i stąd wyjątek.