Tu script tiene varios problemas. Primero, no escapas las variables, así que si $SOURCE o $BACKUP_DIR contienen espacios, fallará. Usa comillas dobles: "$SOURCE". Segundo, rsync --delete es peligroso si la fuente no está montada; podrías borrar todo el backup. Añade una comprobación de que la fuente existe.
Además, generas el timestamp dos veces, lo que puede dar inconsistencias si la medianoche cruza entre comandos. Mejor así:
#!/bin/bash
BACKUP_DIR='/var/backups'
SOURCE='/home/user/data'
TIMESTAMP=$(date +%Y%m%d)
TARGET="$BACKUP_DIR/$TIMESTAMP"
if [ ! -d "$SOURCE" ]; then
echo "Error: Source does not exist" >&2
exit 1
fi
rsync -avz --delete "$SOURCE/" "$TARGET/"
tar -czf "$BACKUP_DIR/backup-$TIMESTAMP.tar.gz" "$TARGET"