If I understand correctly, you want something like:
If your find doesn't support -print0, you can replace it with -exec printf '%s\0' {} +.
Before: After: . . ├── a ├── a │ ├── a │ ├── a │ └── Caches │ └── Caches │ ├── a │ └── a │ │ └── Snapshots │ └── Snapshots │ │ └── a │ └── a │ ├── b └── b │ │ └── a └── c │ └── c └── b ├── c └── Caches ├── a │ └── foo │ └── a └── b └── a The idea is to print the list of files NUL-terminated (as 0 is the only byte that can't occur in a file path) and use perl's -n with -0 option to run some code for each of those filenames (with $_ set to the filename).
With -depth, files are printed before their parent directory. We remove only files or directories (assuming they are empty which is why it's important to process the list in depth order) if their path contains /Caches/ not followed by /Snapshosts/.