Zoom/Scroll - why do you consider them not undoable? Undo-Zoom -> set the zoom level before the change. Undo-Scroll -> move the position back. In each case, they'd store the current state when created. Whether you'd want them in the undo-queue is another story.
Cut / Copy / Paste - in general, in terms of undo I don't expect the clipboard state to change. But you absolutely do expect that the Delete from the Cut and the Adds from the Paste are undoable. If you copy N items and then paste, is that one Add command, or multiple? If it's multiple, you might want Cut / Paste to be meta commands that apply a list of Add subcommands - otherwise, if you paste N items, you'd have to undo N times instead of once. If it's a single Add, then it's somewhat redundant, though it may be nice for display (e.g. "Undo paste" vs. "Undo add...")
Same logic goes for Cut.
The short answer is: you could have every action be a command, if it makes sense in your code. But it may be overkill - you could also separate between the model and the view, and only have things that actually alter the model be a command / undoable.