Your question
echo "$BACKUP_FOLDER -exec ls -la {} \; | awk { if ( '$8'==2011) printf $0"\n" }";
won't display anything useful for two reasons:
In order to see the command as it would get executed by the shell, you have to escape the special characters $ and " with a backslash.
$8 is just the eighth command-line argument for bash. To see what awk would replace it with, execute this command instead:
find $BACKUP_FOLDER -exec ls -la {} \; | awk '{ if ( $8==2011) printf $0"\n" }'
Your approach
Your for loop doesn't work since printf $0 prints an entire line from ls -l (containing permissions, owners, date and time).
To fix this, you have to eliminate all but the bare file name using, e.g., awk itself or cut:
for logs in `find "$BACKUP_FOLDER" -exec ls -la {} \; | awk '{ if ( $8==2011) print $0 }' | cut -c 43-`; do ... done
This will create problems if there are spaces in the filenames. Setting the internal file separator to new-line only (IFS=$'\n' in bash) should take care of spaces.
Your problem
Your approach isn't very portable, since a different version of ls or a different locale might alter the fields.
To process all files from 2011, instead of your approach, I'd use
for logs in $(find "$BACKUP_FOLDER" -exec bash -c '[[ "$(stat -c %y "$0")" =~ ^2011 ]]' {} \; -print); do ... done
or, if possible,
find "$BACKUP_FOLDER" -exec bash -c '[[ "$(stat -c %y "$0")" =~ ^2011 ]]' {} \; -exec ... \;
Again, modifying the IFS should take care of spaces, but the second approach will be more reliable.
find replaces {} with the currently processed file and passes it as an argument to bash, which can access it as $0.
stat -c %y "$0" shows the modification time of $0 and [[ "$(...)" =~ ^2011 ]] checks if it begins with 2011.
If it does, bash -c '...' returns true and -print prints the filename or -exec executes a command.