With eg SRC_URI=file://foo;subdir=bar, the file gets copied into ${WORKDIR} not ${WORKDIR]/bar. This is because the destination path is absolute so the chdir to $subdir doesn't have any effect.
The according code block is here: https://github.com/openembedded/bitbake/blob/bfd13dfbc4c9f1dd8315002271791b1d9e274989/lib/bb/fetch2/__init__.py#L1243-L1287 In Line 1281, the cwd is changed to the specified subdir. The copy command is executed in line 1287. However, when the command is constructed in line 1270, the absolute path (rootdir) is added to the relative destdir. Thus, changing the cwd has no effect at all.
Fixed as of bitbake 46306912a96444790efa9418d934dfdd36773ba1