Não use a substituição de comando na saída de find . Aqui tudo pode ser feito com find :
find . -mtime 1 -type f ! -exec lsof -t {} \; -exec rm -f {} \; > /dev/null
Com algumas implementações find (incluindo FreeBSD find de onde vem e GNU find ), você pode usar -delete em vez de -exec rm... .
O motivo pelo qual você está recebendo um erro é que não há comando entre then e else e alguns shells (começando com o shell Bourne de onde vem essa sintaxe) requerem pelo menos um (e um comentário não é um comando). Note que é completamente arbitrário e não há razão para que essas camadas façam isso. yash e zsh não têm essa limitação ( if false; then else echo x; fi e mesmo if false; then else fi funcionam bem com eles).
Como outros já disseram, você pode usar um comando noop como : (ou for nothing in; do nothing; done ) ou inverter a lógica com a palavra-chave ! (disponível em shells POSIX, mas não no shell Bourne (você encontrará que usando : para isso era comum naquele shell)). mksh e yash suportam if false; then () else echo x; fi (eu não confiaria nele, já que isso poderia mudar em versões futuras).
Outra abordagem é com:
lsof... || {
cmd1
cmd2
}
embora uma diferença seja o status geral de saída, que será o de lsof se lsof falhar.