in reply to Overriding CORE::GLOBAL::die and $^S

Although I can't say how/why dbsqlexec is overriding your 'die' handler, you might be able to use an alternative:
$SIG{'__DIE__'} = \&my_die_handler;
Unless another package changes this setting, this traps anyone's call to 'die'.
Update: I think I misunderstood what you were saying you did.

Once you install a new handler for '__DIE__' (or __WARN__), then even 'die's or 'warn's inside of evals will call your code. The handler catches all instances of these calls within the scope of that %SIG modification. One solution to this is to reset the handlers inside the eval block:
eval { local $SIG{'__DIE__'} = 'DEFAULT'; $dbh->nsql; }