Zbadałem dokładniej sprawę i oto wnioski

. Znaki są konwertowane przed wysłaniem przez przeglądarkę na kodowanie zgodne z tym które jest na stronie www. Tzn. że jak na stronie mam utf-8 to wyśle mi nazwę w utf-8. Testowałem na FF 3.5 i na Operze 10.10. Na IE powinno być podobnie. Używam linuxa i mam ustawione kodowanie w systemie na utf-8. Dlatego gdy strona jest w kodowaniu utf to w $_FILES dostaje nazwę pliku w tymże kodowaniu i move_uploaded_file() zapisuje elegancko polskie znaki. Gdy zmienię kodowanie na powiedzmy iso-8859-2 i wyślę plik to funkcja move_uploaded_file() dostanie nazwę pliku z kodowaniem iso i w systemie pokaże mi krzaki zamiast polskich znaków. Dlatego jeśli masz kodowanie znaków w systemie inne niż na stronie z której idzie plik musisz konwertować kodowania. Możesz użyć iconv() albo mb_convert_encoding() (info w manualu). Tak mi się wydaje że flash skoro to wynalazek amerykansky

to pewnie wysyła wszystko w kodowaniu iso-8859-1. Możesz potestowac co dostajesz skryptem niżej i sprawdzać jakie kodowanie dostajesz od flasha zmieniając ręcznie kodowanie strony w przeglądarce już po wysłaniu pliku.
To kod którym testowałem:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Przykład</title>
</head>
<body>
<form action="
<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data" method="post">
<input type="file" name="plik" /> <input type="submit" value="Wyślij" />
</form>
<pre>
<?php
if($_FILES['plik']['error'] == 0){
$path = dirname(__FILE__).DIRECTORY_SEPARATOR
.$_FILES['plik']['name']; }
?>
</pre>
</body>
</html>