It is used for getting information about running processes. To get information from state, you need to call process (hard, if its message queue is too big). But process dictionary can be asked directly.
Also, information from the process dictionary is shown in SASL crash messages.
I am using this kind of code to find MySQL connection and receiver processes for localhost:

```erlang
IsMySQL = fun(Host, Pid) ->
    try
        {dictionary, PD} = erlang:process_info(Pid, dictionary),
        {mim_process_type, Type} = lists:keyfind(mim_process_type, 1, PD),
        case Type of
            mysql_recv ->
                true;
            mysql_conn ->
                true
        end
    catch _:_ ->
        false
    end
    end.

[Pid || Pid <- processes(), IsMySQL(<<"localhost">>, Pid)].
```

This functionality also can be used for something else :)