I thought this was documented but it turns out it's not.
Lagom can serialize any exceptions that extend TransportException, but it can only deserialize them back to the original exception if it knows about them, otherwise it will deserialize to a best fit type based on the status code. The exceptions that it knows about are hard coded, you can see the logic for selecting an exception here:
First it checks the exception name to see if it has an exception with that name - in the case of a custom exception it won't. Then it checks by HTTP status code, and in your case it's finding the DeserializationException because you're using a 400 error.
What we should probably do in Lagom is provide an abstract class that handles the json serialization of TransportException for you, but allows you to easily plug in your own exception types. For now it would probably suffice for you to just copy that class, and do lookups on your own exception types before doing the lookups on the built in ones.
Cheers,
James