There's no difference in terms of what happens (the files will be deleted) so you can use whichever approach fits your work flow.
dired-flag-for-deletion) is specifically for deleting a number of files at once. Having a two-step process (flag, delete) is a safety mechanism so you can see what is about to be deleted. This is particularly useful when you might be deleting things based on a pattern (using
% d, etc) -- you have a chance to make sure the pattern wasn't too broad.
Marks (m or * m,
dired-mark) provide a general mechanism for operating on a set of files. In this case delete is just one of the many actions that are possible on the marked set of files. I imagine delete is included here as a convenience and because it would just seem like an oversight if you could take any action on marked files except deleting them.
The marking commands also let you build your set of files in more complex ways. For example, it's often useful to mark some set of files, then use * t to toggle the marks so you can delete all the files that did not match.
The other benefit of having two separate commands is that you can use flag/delete to delete a couple files without affecting files you have marked for some other purpose. For example, you might mark a bunch of files so that you can search across them, but then decide there are a couple you just want to delete. You can flag/delete those and then keep searching through your marked set.
I use both of these mechanisms, depending on what I'm trying to do. I probably use marks most often, since its more flexible. I'll use flag/delete for simple things where I just want to delete a couple specific files or all the
# backup files in a directory.