Seems like custom data indices can be mangled when many layers are present in the mesh, so use more strict calculation of offset (copied over from BM_CD_LAYER_ID). I was under the impression that all custom data would be deleted on entering dyntopo, it seems this is not the case though.