Refactor refreshSmartPlaylist into guard checks + core evaluation logic
(doRefreshSmartPlaylist). Add public Evaluate method that bypasses
ownership/delay guards for system-level evaluation (e.g., background
processing after scanner import).
Part of #4539