If you try to create a plugin in a subfolder of the 'plugins' directory and your are running Wordpress on a Windows machine, the function registered by register_activation_hook() will not be executed.
This is because of different backslashes on UNIX and Windows and the way the function plugin_basename()/admin panel works.
On Windows plugin_basename() returns the backslash in its return value while on Unix returning the slash. The plugins activation screen in the admin panel of Wordpress is always using slashes. You can easily see this by hovering over Askimets activate/deactivate button.
register_activation_hook() is using plugin_basename() to install the activation filter while the file wp-admin/plugins.php will use the value from the plugins activation screen to access the installed filter. Because of different slash types, the filter will not be found and so will never be executed.
If you take a look into the Bad Behaviour 2.0.4 plugin, you'll see from the comments that other guys have had the same problem with register_activation_hook().