In file dictionary.f90 you have:
integer, parameter, private :: multiplier = 31
integer function dict_hashkey( key )
character(len=*), intent(in) :: key
integer :: hash
integer :: i
dict_hashkey = 0
do i = 1,len(key)
dict_hashkey = multiplier * dict_hashkey + ichar(key(i:i))
dict_hashkey = 1 + mod( dict_hashkey-1, hash_size )
end function dict_hashkey
These pieces of code work only for small keys, if key has length more then 4-5 symbols (like "Piano2" in you test_dict.f90) variable dict_hashkey becomes too big for integer (it seems because of big multiplier). In Intel Fortran after overflowing integer size 2,147,483,647dict_hashkey becomes negative and rest of code breaks.
Why multiplier is so big? I've tried with multiplier=3 and it help a little to increase max key size.