I have the same problem. I think it's because the dbus' error struct isn't initialized, when a event that hald-addon-acpi cannot handle, like powersaved "thermal_zone" is issued.
I made a patch for the latest version, it works for me...
--- a/hal-0.5.9.1/hald/linux/addons/addon-acpi.c 2007-08-29 22:04:47.736784387 +0200 +++ b/hal-0.5.9.1/hald/linux/addons/addon-acpi.c 2007-08-29 23:48:00.200028822 +0200 @@ -188,6 +188,7 @@ main_loop (LibHalContext *ctx, FILE *eve while (fgets (event, sizeof event, eventfp)) { HAL_DEBUG (("event is '%s'", event)); + dbus_error_init (&error); if (sscanf (event, "%s %s %x %x", acpi_path, acpi_name, &acpi_num1, &acpi_num2) == 4) { char udi[256]; @@ -200,7 +201,6 @@ main_loop (LibHalContext *ctx, FILE *eve HAL_DEBUG (("button event")); /* TODO: only rescan if button got state */ - dbus_error_init (&error); if (libhal_device_rescan (ctx, udi, &error)) { dbus_error_init (&error); type = libhal_device_get_property_string(ctx, udi, @@ -216,11 +216,9 @@ main_loop (LibHalContext *ctx, FILE *eve } } else if (strncmp (acpi_path, "ac_adapter", sizeof ("ac_adapter") - 1) == 0) { HAL_DEBUG (("ac_adapter event")); - dbus_error_init (&error); libhal_device_rescan (ctx, udi, &error); } else if (strncmp (acpi_path, "battery", sizeof ("battery") - 1) == 0) { HAL_DEBUG (("battery event")); - dbus_error_init (&error); libhal_device_rescan (ctx, udi, &error); #ifdef BUILD_ACPI_IBM } else if (strncmp (acpi_path, "ibm/hotkey", sizeof ("ibm/hotkey") -1) == 0) { @@ -240,7 +238,9 @@ main_loop (LibHalContext *ctx, FILE *eve } } - dbus_error_free (&error); + if (dbus_error_is_set (&error)) { + dbus_error_free (&error); + } fclose (eventfp); }