The SMOOTH ON command should only be issued at the start of a continuous unbroken chain of entities (on the same line as a G1). Then, a SMOOTH OFF command must be issued concurrently with the last entity in that chain.
No rapid movements should be incorporated within the chain of entities.
I have no idea how one could incorporate such smoothing gcodes within a standard CAM program, so I usually just hand edit the program, find the finishing pass, and insert the gcodes that call SMOOTH ON and SMOOTH OFF myself.
First you get good, then you get fast. Then grouchiness sets in.
(Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management)